为什么以下代码片段在JS中不起作用?

时间:2012-02-17 12:42:27

标签: javascript scope

以下是代码:

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

为什么在javascript中我无法将myVar.test分配给internalTest?

7 个答案:

答案 0 :(得分:2)

myVar.test评估之前(对象文字)对myVar的分配,因此myVar未定义并访问{{1}上的属性}或undefined会导致错误。

答案 1 :(得分:1)

在第internalTest: myVar.test行,myVar尚未定义(您仍然使用属性internalTest定义它。

您需要将代码更改为

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

答案 2 :(得分:0)

当引擎读取myVar.test时,它还没有值

答案 3 :(得分:0)

myVar在其自己的定义中未知,您应该写:

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

答案 4 :(得分:0)

这是因为您在myinternalObj中引用的对象尚未初始化。

更简单的版本看起来像

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

当你在对象内部引用它时,对象的初始化没有完成。

答案 5 :(得分:0)

这是因为当myinternalObj设置好后,myVar仍在设置中。

你究竟想要实现什么目标。我想你的代码可以重构。

答案 6 :(得分:0)

以下在JS控制台中有效:

> var myVar = {}
undefined

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

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

> myVar.myinternalObj.internalTest();
//shows the alert