从现在开始强迫自己使用 Reflect
静态方法
Reflect.apply(target, thisArg, args)
等同于 Function.prototype.apply.call(func, thisArg, args)
Reflect.construct(target, args)
等同于 new target(...args)
new Student(name:'王五')
Reflect.get(target, name, receiver)
var myObject = {
foo: 1,
bar: 2,
get baz() {
return this.foo + this.bar;
},
};
var myReceiverObject = {
foo: 4,
bar: 4,
};
Reflect.get(myObject, 'baz', myReceiverObject) // 8
Reflect.set(target, name, value, receiver)
var myObject = {
foo: 4,
set bar(value) {
return this.foo = value;
},
};
var myReceiverObject = {
foo: 0,
};
Reflect.set(myObject, 'bar', 1, myReceiverObject);
myObject.foo // 4
myReceiverObject.foo // 1
Reflect.defineProperty(target, name, desc)
等同于 Object.defineProperty
Reflect.deleteProperty(target, name)
const myObj = { foo: 'bar' };
// 旧写法
delete myObj.foo;
// 新写法
Reflect.deleteProperty(myObj, 'foo');
Reflect.has(target, name)
var myObject = {
foo: 1,
};
// 旧写法
'foo' in myObject // true
// 新写法
Reflect.has(myObject, 'foo') // true
Reflect.ownKeys(target)
等同于Object.getOwnPropertyNames
与Object.getOwnPropertySymbols
之和
Reflect.isExtensible(target)
Reflect.isExtensible
方法对应Object.isExtensible
,返回一个布尔值,表示当前对象是否可扩展
Reflect.preventExtensions(target)
Reflect.preventExtensions
对应Object.preventExtensions
方法,用于让一个对象变为不可扩展。它返回一个布尔值,表示是否操作成功
Reflect.getOwnPropertyDescriptor(target, name)
Reflect.getOwnPropertyDescriptor
基本等同于Object.getOwnPropertyDescriptor
,用于得到指定属性的描述对象,将来会替代掉后者
var a={sb:1}
Reflect.getOwnPropertyDescriptor(a, 'sb');
//{configurable: true,enumerable: true,value: 1,writable: true}
Reflect.getPrototypeOf(target)
Reflect.getPrototypeOf
方法用于读取对象的__proto__
属性,对应Object.getPrototypeOf(obj)
。
Reflect.setPrototypeOf(target, prototype)
Reflect.setPrototypeOf
方法用于设置目标对象的原型prototype
,对应Object.setPrototypeOf(obj, newProto)
方法。它返回一个布尔值,表示是否设置成功。