当前位置:首页 > JavaScript

js 实现反射

2026-03-15 02:07:36JavaScript

反射的基本概念

反射(Reflection)是指在运行时检查、访问和修改对象的结构和行为的能力。JavaScript 虽然没有像 Java 或 C# 那样内置完整的反射 API,但可以通过一些内置方法和特性实现类似功能。

获取对象的属性和方法

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

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

动态访问属性

通过字符串名称动态访问对象的属性,可以使用 []Reflect.get()

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

动态调用方法

使用 Function.prototype.apply()Reflect.apply() 动态调用方法。

const obj = {
  greet: function(name) {
    return `Hello, ${name}!`;
  }
};

const methodName = 'greet';
console.log(obj[methodName].apply(obj, ['Alice'])); // "Hello, Alice!"
console.log(Reflect.apply(obj[methodName], obj, ['Bob'])); // "Hello, Bob!"

检查对象类型

使用 typeofinstanceofObject.prototype.toString.call() 检查对象的类型。

const value = [1, 2, 3];
console.log(typeof value); // "object"
console.log(value instanceof Array); // true
console.log(Object.prototype.toString.call(value)); // "[object Array]"

修改对象行为

通过 Object.defineProperty()Reflect.defineProperty() 动态修改对象的属性行为。

const obj = {};
Reflect.defineProperty(obj, 'x', {
  value: 42,
  writable: false
});
console.log(obj.x); // 42
obj.x = 100; // 静默失败(严格模式下会报错)
console.log(obj.x); // 42

创建代理对象

使用 Proxy 对象可以对目标对象的操作进行拦截和自定义。

const target = { a: 1 };
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.b); // 0

反射 API(ES6)

ES6 引入了 Reflect 对象,提供了一组静态方法用于反射操作。

js 实现反射

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

通过这些方法,JavaScript 可以实现灵活的反射功能,适用于动态代码生成、元编程等场景。

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

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…