当前位置:首页 > JavaScript

js 实现nameof

2026-02-01 08:52:56JavaScript

在 JavaScript 中,没有内置的 nameof 类似 C# 的功能,但可以通过一些方法模拟类似效果。以下是几种实现方式:

使用函数包装

通过函数包装变量或属性名,返回其字符串形式:

js 实现nameof

function nameof(obj, prop) {
    return prop;
}

const user = { name: 'John' };
console.log(nameof(user, 'name')); // 输出 "name"

利用 Proxy 捕获属性访问

通过 Proxy 拦截属性访问,动态获取属性名:

js 实现nameof

function nameof(target) {
    return new Proxy({}, {
        get(_, prop) {
            return prop;
        }
    });
}

const obj = nameof();
console.log(obj.name); // 输出 "name"

通过解构赋值提取属性名

利用对象解构提取属性名,但需预先定义对象:

const user = { name: 'John' };
const { name: nameProp } = user;
console.log(nameProp); // 输出 "John", 但无法直接获取 "name"

使用 TypeScript 的 keyof

如果使用 TypeScript,可以通过 keyof 实现类型安全的属性名提取:

function nameof<T>(key: keyof T): keyof T {
    return key;
}

interface User {
    name: string;
}
console.log(nameof<User>('name')); // 输出 "name"

注意事项

  • 纯 JavaScript 无法直接获取变量名(如 nameof(myVar)),因为变量名在运行时不可见。
  • 上述方法主要用于对象属性名的安全引用,避免硬编码字符串。

选择方法时需根据实际场景(如是否用 TypeScript、是否需要类型安全等)权衡。

标签: jsnameof
分享给朋友:

相关文章

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…