Object.defineProperty和Reflect.defineProperty都是可以从底层修改一个对象的元属性的,Reflect.defineProperty将逐步的会取代Object.defineProperty,二者的基本用法是一致的。
其中很大的一个区别是:
Object.defineProperty的返回值是设置的对象;而Reflect.defineProperty的返回值是boolean,表示设置属性是否成功。
撸代码看看:
// 测试一下defineProperty
function testDP(){
let tempObj1 = {};
let newp1 = Object.defineProperty(tempObj1, "email", {
value : "newp1@126.com",
enumerable : true,
});
let tempObj2 = {};
let newp2 = Reflect.defineProperty(tempObj2, "email", {
value : "newp2@126.com",
enumerable : true,
"configurable":true
});
console.log(`testDP :: tempObj1.email = ${tempObj1.email}, newp1.email = ${newp1.email}, tempObj1 === newp1 ?? ${tempObj1===newp1}`);
console.log(`testDP :: tempObj2.email = ${tempObj2.email}, newp2.email = ${newp2.email}, tempObj2 === newp2 ?? ${tempObj2===newp2}`);
}
testDP();
输出:
testDP :: tempObj1.email = newp1@126.com, newp1.email = newp1@126.com, tempObj1 === newp1 ?? true
testDP :: tempObj2.email = newp2@126.com, newp2.email = undefined, tempObj2 === newp2 ?? false