Почему следующий фрагмент не работает в JS? - PullRequest
0 голосов
/ 17 февраля 2012

Ниже приведен код:

var myVar = {
    test:function(){
       alert('hello');        
    },
    myinternalObj: {
        internalTest: myVar.test
    }
};

Почему в javascript я не могу назначить myVar.test для internalTest?

Ответы [ 7 ]

2 голосов
/ 17 февраля 2012

myVar.test оценивается до присвоение (литерала объекта) myVar и, таким образом, myVar не определено, а доступ к свойству undefined или null приводит к ошибке.

1 голос
/ 17 февраля 2012

В строке internalTest: myVar.test myVar еще не определен (вы все еще определяете его с помощью свойства internalTest.

. Вам нужно изменить код на

var myVar = {
    test:function(){
       alert('hello');        
    }
};
myVar.myinternalObj = {
    internalTest: myVar.test
};
0 голосов
/ 17 февраля 2012

В консоли JS работает:

> var myVar = {}
undefined

> myVar.test = function() { alert('hello'); }
function () { alert('hello'); }

> myVar.myinternalObj = { internalTest: myVar.test }
Object

> myVar.myinternalObj.internalTest();
//shows the alert
0 голосов
/ 17 февраля 2012

Это происходит потому, что когда myinternalObj установлен, myVar все еще устанавливается.

Чего именно вы пытаетесь достичь.Я полагаю, ваш код может быть реорганизован.

0 голосов
/ 17 февраля 2012

Это потому, что объект, на который вы ссылаетесь в myinternalObj, еще не инициализирован.

Более простая версия выглядит как

var object = {a:'a', b: object.a};

Инициализация объекта не завершена, когда вы ссылаетесь на него внутрисам по себе.

0 голосов
/ 17 февраля 2012

myVar неизвестно в его собственном определении, вы должны написать:

var myVar = {
    test:function(){
       alert('hello');        
    }
};
myVar.myinternalObj = { internalTest : myVar.test };
0 голосов
/ 17 февраля 2012

Когда двигатель читает myVar.test, он еще не имеет значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...