当前位置:首页 > JavaScript

js实现反射

2026-04-06 03:47:48JavaScript

反射的概念

反射是指在运行时动态获取和操作对象的属性和方法。JavaScript作为动态语言,天生支持反射机制,主要通过内置对象和方法实现。

获取对象属性

使用Object.keys()获取对象所有可枚举属性:

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

Reflect.ownKeys()可以获取包括Symbol在内的所有属性:

const sym = Symbol('key');
const obj = {[sym]: 0, b:1};
console.log(Reflect.ownKeys(obj)); // ["b", Symbol(key)]

检查属性存在

in操作符或Reflect.has()检查属性是否存在:

js实现反射

const obj = {a:1};
console.log('a' in obj); // true
console.log(Reflect.has(obj, 'toString')); // true (继承属性)

调用方法

使用Reflect.apply()动态调用函数:

function sum(a,b) { return a+b; }
console.log(Reflect.apply(sum, null, [1,2])); // 3

修改属性

Reflect.set()动态设置属性值:

js实现反射

const obj = {};
Reflect.set(obj, 'key', 123);
console.log(obj.key); // 123

构造函数调用

通过Reflect.construct()实现动态实例化:

class Person {
  constructor(name) { this.name = name; }
}
const instance = Reflect.construct(Person, ['Alice']);
console.log(instance.name); // "Alice"

原型操作

Object.getPrototypeOf()Reflect.setPrototypeOf()操作原型链:

const obj = {};
const proto = { method(){} };
Reflect.setPrototypeOf(obj, proto);
console.log(Object.getPrototypeOf(obj) === proto); // true

属性描述符

Object.getOwnPropertyDescriptor()获取属性配置:

const obj = { get value(){ return 42; } };
const desc = Object.getOwnPropertyDescriptor(obj, 'value');
console.log(desc.get); // [Function: get value]

注意事项

  • 反射操作可能破坏封装性,需谨慎使用
  • 某些反射方法会返回布尔值表示操作成功与否(如Reflect.deleteProperty
  • 相比直接操作,反射API提供更规范的错误处理方式

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

相关文章

js实现继承

js实现继承

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

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js防抖和节流实现

js防抖和节流实现

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

js手势实现

js手势实现

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

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…

js 实现全选

js 实现全选

实现全选功能的方法 使用 JavaScript 实现全选功能通常需要操作复选框(checkbox)的状态。以下是几种常见的实现方式。 通过 DOM 操作实现全选 // 获取全选复选框和子复选框 co…