如何删除Javascript对象属性?

时间:2016-04-15 10:22:25

标签: javascript

我试图删除一个对象属性,它是另一个对象的浅层副本。 但是当我尝试删除它时会出现问题,它在原始值抛出预期输出时永远不会消失。



var obj = {
    name:"Tom"
};

var newObj = Object.create(obj);
delete newObj.name;//It never works!

console.log(newObj.name);//name is still there




2 个答案:

答案 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.