2016-03-23 4 views
1

У меня возникли проблемы с пониманием удаления операции в javascript.Удалить операцию в Javascript

У меня есть объект, как следует -

var object = {"name" : "abc"}; 

object.prototype = {"name" : "xyz"}; 

Если удалить «имя» свойство из объекта, его необходимо удалить из объекта, а не от прототипа в качестве значения прототипа используется только при работе ПОЛУЧИТЬ ,

Таким образом, после -

delete object.name 

Если я печатаю object.name это дает мне «неопределенными», в то время как на мой взгляд, он должен дать мне "хуг.

Сначала я думал, что операция delete просто устанавливает значение object.name как «undefined», но тогда object.hasOwnProperty («name») дает мне false.

Я ничего не пропустил?

+1

_If печатаю object.name это дает мне «неопределенными», в то время как на мой взгляд, он должен дать мне «хуг» ._ кажется, что вы путаете 'object.name' и' object.prototype.name' – hindmost

+0

Поведение, которое вы описываете, произойдет только в том случае, если прототип произошел в цепочке прототипов. – RamblinRose

ответ

7

Отверстие в вашем понимании с прототипами, а не с удалением.

Значения на прототипе отображаются на экземплярах объекта, а не объекта, к которому принадлежит свойство прототипа.

Вам необходимо создать функцию-конструктор, поместить на нее прототип, а затем создать объект из этой функции с помощью new.

function MyObject (name) { 
 
    this.name = name; 
 
} 
 

 
MyObject.prototype.name = "xyz"; 
 

 
var instance = new MyObject("abc"); 
 

 
document.write(instance.name); 
 
document.write("<br>"); 
 
delete instance.name; 
 
document.write(instance.name);

+0

Отличный ответ, но я борюсь с «Значения на прототипе появляются на экземплярах объекта, а не на объекте, к которому принадлежит свойство прототипа» - может кто-нибудь немного расширить, пожалуйста? –

+0

@WillJenkins - Umm. Я сделал. В следующем абзаце. – Quentin

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