当前位置:首页 > JavaScript

js 实现反射

2026-04-06 19:49:42JavaScript

反射的基本概念

反射是指在运行时动态获取和操作对象的属性和方法。JavaScript 本身没有内置的反射机制,但可以通过一些方法和技巧实现类似的功能。

获取对象的属性和方法

使用 Object.keys()Object.getOwnPropertyNames()Reflect.ownKeys() 可以获取对象的属性列表。

const obj = { a: 1, b: 2 };
console.log(Object.keys(obj)); // ["a", "b"]
console.log(Object.getOwnPropertyNames(obj)); // ["a", "b"]
console.log(Reflect.ownKeys(obj)); // ["a", "b"]

动态访问属性

使用方括号语法可以动态访问对象的属性。

js 实现反射

const obj = { a: 1, b: 2 };
const propName = 'a';
console.log(obj[propName]); // 1

调用方法

使用 Reflect.apply() 或直接通过方括号语法调用方法。

const obj = {
  greet: function(name) {
    return `Hello, ${name}`;
  }
};
const methodName = 'greet';
console.log(obj[methodName]('World')); // "Hello, World"
console.log(Reflect.apply(obj[methodName], obj, ['World'])); // "Hello, World"

修改属性

使用 Reflect.set() 或直接赋值可以动态修改属性。

js 实现反射

const obj = { a: 1, b: 2 };
Reflect.set(obj, 'a', 10);
console.log(obj.a); // 10
obj['b'] = 20;
console.log(obj.b); // 20

检查属性是否存在

使用 Reflect.has()in 操作符可以检查属性是否存在。

const obj = { a: 1, b: 2 };
console.log(Reflect.has(obj, 'a')); // true
console.log('b' in obj); // true

创建代理对象

使用 Proxy 可以创建一个代理对象,拦截对目标对象的操作。

const target = { a: 1, b: 2 };
const handler = {
  get: function(target, prop) {
    return prop in target ? target[prop] : 0;
  }
};
const proxy = new Proxy(target, handler);
console.log(proxy.a); // 1
console.log(proxy.c); // 0

获取和设置原型

使用 Object.getPrototypeOf()Object.setPrototypeOf() 可以获取和设置对象的原型。

const obj = {};
const proto = { a: 1 };
Object.setPrototypeOf(obj, proto);
console.log(Object.getPrototypeOf(obj) === proto); // true

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

相关文章

js实现继承

js实现继承

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

js实现日历

js实现日历

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

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…