当前位置:首页 > 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
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现下拉菜单

js实现下拉菜单

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

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…