2013-08-20 5 views
0

Итак, в основном я создал объект-манекен, а затем добавил свойство всем своим дочерним элементам через свойство prototype. Но, конечно, это пустая собственность. Выполняя условную проверку с помощью оператора in, чтобы узнать, было ли у объекта новое свойство, он оказался ложным и выводил «Nothing there». Это потому, что свойство еще не имеет значения?Свойство прототипа javascript без значения

function Master(age, sex, location) 
{ 
    this.age = age; 
    this.sex = sex; 
    this.location = location; 
} 

var me = new Master(99, "Male", "Texas, USA"); 

Master.prototype.username; 


if("username" in me) 
{ 
    document.write("The prototype put the property there."); 
} 
else 
{ 
    document.write("Nothing there.<br />"); 
} 
+1

В Chrome я вижу: «Ничего нет». Если я явно устанавливаю 'Master.prototype.username = undefined', я вижу' Прототип ... '. В каком браузере вы работаете? В общем случае добавление свойства в прототип похоже на добавление переменной класса - в этом примере все экземпляры 'Master' будут иметь одинаковое значение для' username' – dc5

ответ

2

Это потому, что не никакой собственности еще. Просто попытка прочитать свойство не создает его. Master.prototype.username; - это то же самое, что и window.foo - он просто оценивает undefined, но больше ничего не происходит. Если вы хотите установить значение для него, попробуйте:

Master.prototype.username = undefined; 

или лучше

Master.prototype.username = null; 

Разница между null и undefined довольно много, что легче проверить, является ли свойство null; и если вы передадите некоторые функции значения undefined в качестве аргумента, они думают, что вы вообще ничего не передали.