2013-08-15 4 views
3

У меня есть ниже JavaScript функции-JavaScript свойства объекта не отображается

function ResponseVal() 
{ 
    this.value1; 
    this.value2; 
} 


var Response = new ResponseVal(); 

Я попробовал и выполнить над кодом в хромированной consolebar.I не мог понять, почему вновь созданный объект «ответ» не показывает свойства значение1 и значение2 , Может ли кто-нибудь помочь мне понять, что происходит и почему свойства не отображаются.

+1

Вы никогда не создаете свойства 'value1' или' value2'. Все, что вы делаете, - это * читать * их, что не удастся (потому что их не существует), а 'undefined' будет возвращен. Если вы присвоите им значение, то они будут созданы. Простой пример: 'var obj = {}; obj.foo; obj.bar = 42; console.log (OBJ); '. –

+0

Спасибо за ответ. Но если объявить свойство недостаточно, то каким способом было бы создавать свойства в js без его инициализации. – user1461826

+2

Вы не можете объявлять свойства, как вы объявляете переменные (т. Е. 'Var foo;'). Свойства создаются только в том случае, если вы присваиваете им значение. Это значение может быть «null» или «undefined». –

ответ

0

Объявление объекта без установки его по существу ничего не делает. Хотя это не приведет к ошибке, некоторые интерпретаторы будут бросать предупреждение - как и строгий режим, я считаю.

JavaScript не делает это сразу же очевидным. Например, если вы сделаете это:

function Hello() { 
    this.value1; 
} 

var h = new Hello; 
alert(h.value1); 

Оповещение будет читать undefined. Однако свойство value1 никогда не обращалось к нему - его вообще не существует, потому что вы не указали его значение.

Чтобы не допустить ошибки, JavaScript возвращает undefined при попытке доступа к объекту, который не существует. Таким образом, вы получите тот же результат, если вы пишете, скажу:

alert(h.property_that_doesnt_exist); //alerts 'undefined' 

перебора свойств h ясно показывает, что свойство value1 не существует:

for (var key in h) { 
    alert(key + ' = ' + h[key]); 
} 

Это предупреждает ничего, потому что без свойств будут найдены. Однако, если установить свойство в JS примитивным undefined, свойство будет существовать:

function Hello() { 
    this.value1 = undefined; 
} 

var h = new Hello; 

for (var key in h) { 
    alert(key + ' = ' + h[key]); //alerts 'undefined' 
} 

Вы можете запустить приведенный выше код здесь: http://jsfiddle.net/Acdmn/


Но нет никаких оснований, чтобы установить свойство/переменная до undefined. Для того, чтобы создать свойство с «пустым» значением, JavaScript программисты обычно используют null:

function Hello() { 
    this.value1 = null; 
} 

Это дает понять, что собственность была создана намеренно, но вы не готовы дать ей осмысленное значение еще.


Наконец, обратите внимание, что определения собственности работают по-разному от «нормального» (частных) переменных явно установленного с var (хотя они также являются свойством, в этом случае window объекта).Если вы пишете:

var foo; 
alert(foo); 
alert(some_undefined_variable_name); 

Первое предупреждение скажет undefined. Переменная fooбыла создана, существует и содержит примитивное значение undefined (даже если вы не указали его явно). Второе предупреждение, однако, бросить ссылочную ошибку:

ReferenceError: some_undefined_variable_name is not defined 

Так JavaScript неумолим об использовании неопределенных переменных, но это не волнует, если вы пытаетесь использовать неопределенное свойство.

4

Вы должны установить значения на что-то. Все, что вы сделали, это попытаться прочитать их в конструкторе.

function ResponseVal() 
{ 
    this.value1 = ""; 
    this.value2 = ""; 
} 


var Response = new ResponseVal(); 
+0

Да, я не был ясен и редактировал свой ответ. – akatakritos

0

Они по-прежнему не определены. Они существуют только после определения.

0

Вам необходимо присвоить значения value1 и value2, 'null', по крайней мере.

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