Ниже приведен код:
var myVar = { test:function(){ alert('hello'); }, myinternalObj: { internalTest: myVar.test } };
Почему в javascript я не могу назначить myVar.test для internalTest?
myVar.test оценивается до присвоение (литерала объекта) myVar и, таким образом, myVar не определено, а доступ к свойству undefined или null приводит к ошибке.
myVar.test
myVar
undefined
null
В строке internalTest: myVar.test myVar еще не определен (вы все еще определяете его с помощью свойства internalTest.
internalTest: myVar.test
internalTest
. Вам нужно изменить код на
var myVar = { test:function(){ alert('hello'); } }; myVar.myinternalObj = { internalTest: myVar.test };
В консоли JS работает:
> var myVar = {} undefined > myVar.test = function() { alert('hello'); } function () { alert('hello'); } > myVar.myinternalObj = { internalTest: myVar.test } Object > myVar.myinternalObj.internalTest(); //shows the alert
Это происходит потому, что когда myinternalObj установлен, myVar все еще устанавливается.
Чего именно вы пытаетесь достичь.Я полагаю, ваш код может быть реорганизован.
Это потому, что объект, на который вы ссылаетесь в myinternalObj, еще не инициализирован.
Более простая версия выглядит как
var object = {a:'a', b: object.a};
Инициализация объекта не завершена, когда вы ссылаетесь на него внутрисам по себе.
myVar неизвестно в его собственном определении, вы должны написать:
var myVar = { test:function(){ alert('hello'); } }; myVar.myinternalObj = { internalTest : myVar.test };
Когда двигатель читает myVar.test, он еще не имеет значения