当前位置:首页 > 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()返回对象所有属性(包括不可枚举属性):

js实现反射

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

检查属性存在性

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

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

动态调用方法

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

js实现反射

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实现图片轮播

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

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…

js 实现超链接

js 实现超链接

使用 HTML 的 <a> 标签 在 JavaScript 中动态创建超链接可以通过操作 DOM 实现。通过 document.createElement 创建一个 <a> 元…