2016-04-15 3 views
13

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

var obj = { 
 
    name:"Tom" 
 
}; 
 

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

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

+3

Оба являются совершенно разными объектами! Не «ссылка»! – Rayon

+7

С 'var newObj = obj;' Он будет работать так, как вы ожидаете! – Rayon

+0

Из документов, _The Object.create() метод создает «новый объект» _ – Rayon

ответ

13

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

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

delete Object.getPrototypeOf(newObj).name; 

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

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

newObj.name = undefined; 

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

+1

Но использование' _proto_' не рекомендуется. Не так ли? –

+0

Я не уверен, что есть заметная разница при использовании только для чтения, но да, это рекомендуемая практика. –

+0

Спасибо Denys за быстрый ответ, он работает сейчас. – fruitjs

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. 
+0

В консоли Chrome код OP работает отлично: нет необходимости использовать прототип. – manuell

+0

@manuell Я использую хром и не работает должным образом. –

+0

Вы правы. Я также запускал строку 'delete obj.name;'. Без этого, 'name' все еще здесь, в newObj (вроде), действительно. – manuell

Смежные вопросы