我试图删除一个对象属性,它是另一个对象的浅层副本。 但是当我尝试删除它时会出现问题,它在原始值抛出预期输出时永远不会消失。
var obj = {
name:"Tom"
};
var newObj = Object.create(obj);
delete newObj.name;//It never works!
console.log(newObj.name);//name is still there

答案 0 :(得分:14)
newObj
继承自obj
。
您可以通过访问父对象来删除该属性:
delete Object.getPrototypeOf(newObj).name;
(更改父对象)
您也可以通过将值设置为undefined
(例如)来隐藏它:
newObj.name = undefined;
但是你不能删除newObj上的属性而不从父对象中删除它,因为查找原型prototype chain直到找到它。
答案 1 :(得分:4)
基本上Object.create
将创建一个对象,根据传递的对象设置其原型并返回它。因此,如果您想delete
Object.create
返回的对象中的任何属性,则必须访问其原型。
var obj = { name:"Tom" };
var newObj = Object.create(obj);
delete Object.getPrototypeOf(newObj).name
console.log(newObj.name); //undefined.