当前位置:首页 > 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实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…