Подтвердить что ты не робот

Как удалить свойство объекта Javascript?

Я пытаюсь удалить свойство объекта, которое является мелкой копией другого объекта. Но проблема возникает, когда я пытаюсь удалить ее, она никогда не гаснет, а исходное значение вызывает ожидаемый результат.

var obj = {
    name:"Tom"
};

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

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

Ответ 1

newObj наследуется от obj.

Вы можете удалить свойство, обратившись к родительскому объекту:

delete Object.getPrototypeOf(newObj).name;

(который изменяет родительский объект)

Вы также можете затенять его, установив значение на undefined (например):

newObj.name = undefined;

Но вы не можете удалить свойство newObj, не удаляя его из родительского объекта, так как прототип просматривает цепочку прототипов до тех пор, пока он не будет найден.

Ответ 2

В основном Object.create создаст объект, установит его прототип в соответствии с переданным объектом и вернет его. Поэтому, если вы хотите delete любое свойство из возвращаемого объекта Object.create, вам нужно получить доступ к его прототипу.

var obj = { name:"Tom" };
var newObj = Object.create(obj);
delete Object.getPrototypeOf(newObj).name
console.log(newObj.name); //undefined.