当前位置:首页 > JavaScript

js实现反射

2026-02-01 11:04:04JavaScript

反射的概念

反射是指在运行时动态获取和操作对象的属性和方法的能力。JavaScript作为动态语言,本身具备一定的反射特性,可以通过内置方法实现类似功能。

获取对象属性

使用Object.keys()可以获取对象所有可枚举属性的键名数组:

const obj = {a: 1, b: 2};
const keys = Object.keys(obj); // ['a', 'b']

Object.getOwnPropertyNames()返回对象所有属性(包括不可枚举属性):

const props = Object.getOwnPropertyNames(obj); // ['a', 'b']

检查属性存在性

in运算符或hasOwnProperty()方法可检查属性是否存在:

console.log('a' in obj); // true
console.log(obj.hasOwnProperty('b')); // true

动态调用方法

通过字符串形式的属性名可以动态访问方法并执行:

const methodName = 'toString';
obj[methodName](); // "[object Object]"

修改对象结构

Reflect对象提供了一组与对象交互的方法:

Reflect.set(obj, 'c', 3); // 添加新属性
Reflect.deleteProperty(obj, 'a'); // 删除属性

原型操作

通过Object.getPrototypeOf()Object.setPrototypeOf()可以操作原型链:

const proto = Object.getPrototypeOf(obj);
Object.setPrototypeOf(obj, {d: 4});

函数元信息

函数对象本身也支持反射操作:

function test(a, b) {}
console.log(test.length); // 2
console.log(test.name); // "test"

完整示例

class Person {
  constructor(name) {
    this.name = name;
  }

  greet() {
    return `Hello, ${this.name}`;
  }
}

// 反射操作
const p = new Person('Alice');
const method = 'greet';
console.log(p[method]()); // "Hello, Alice"

// 查看所有属性
console.log(Object.getOwnPropertyNames(p)); // ["name"]
console.log(Object.getOwnPropertyNames(Person.prototype)); // ["constructor", "greet"]

JavaScript的反射能力虽然不如静态语言强大,但通过上述方法已经能满足大多数动态操作需求。ES6引入的ReflectProxy对象进一步增强了反射能力。

js实现反射

标签: 反射js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

js实现继承

js实现继承

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

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前…

js如何实现继承

js如何实现继承

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