Javascript 为什么下面的代码段没有';你不会在JS工作吗?
代码如下:Javascript 为什么下面的代码段没有';你不会在JS工作吗?,javascript,scope,Javascript,Scope,代码如下: var myVar = { test:function(){ alert('hello'); }, myinternalObj: { internalTest: myVar.test } }; 为什么在javascript中我无法将myVar.test分配给internalTest?myVar.test在分配(对象文本)之前进行评估到myVar,因此myVar是未定义的,访问undefined或null上
var myVar = {
test:function(){
alert('hello');
},
myinternalObj: {
internalTest: myVar.test
}
};
为什么在javascript中我无法将myVar.test分配给internalTest?
myVar.test
在分配(对象文本)之前进行评估到myVar
,因此myVar
是未定义的,访问undefined
或null
上的属性会导致错误。myVar.test
在赋值(对象文本)之前进行评估到myVar
,因此myVar
未定义,访问undefined
或null
上的属性会导致错误。当引擎读取myVar.test时,它还没有值当引擎读取myVar.test时,它在internalTest:myVar.test
行中还没有值,myVar尚未定义(您仍在使用属性internalTest
定义它)
您需要将代码更改为
var myVar = {
test:function(){
alert('hello');
}
};
myVar.myinternalObj = {
internalTest: myVar.test
};
在
internalTest:myVar.test
行中,尚未定义myVar(您仍在使用属性internalTest
定义它)
您需要将代码更改为
var myVar = {
test:function(){
alert('hello');
}
};
myVar.myinternalObj = {
internalTest: myVar.test
};
myVar
在它自己的定义中是未知的,您应该写:
var myVar = {
test:function(){
alert('hello');
}
};
myVar.myinternalObj = { internalTest : myVar.test };
myVar
在它自己的定义中是未知的,您应该写:
var myVar = {
test:function(){
alert('hello');
}
};
myVar.myinternalObj = { internalTest : myVar.test };
这是因为您在myinternalObj中引用的对象尚未初始化 一个更简单的版本看起来像
var object = {a:'a', b: object.a};
当您在其内部引用对象时,该对象的初始化尚未完成。这是因为您在myinternalObj中引用的对象尚未初始化 一个更简单的版本看起来像
var object = {a:'a', b: object.a};
当您在对象内部引用它时,对象的初始化未完成。这是因为设置了myinternalObj时,仍在设置myVar
你到底想实现什么。我想你的代码可以重构。这是因为当设置myinternalObj时,myVar仍在设置中
你到底想达到什么目的。我想你的代码可以重构。在JS控制台中,以下功能可以正常工作:
> var myVar = {}
undefined
> myVar.test = function() { alert('hello'); }
function () { alert('hello'); }
> myVar.myinternalObj = { internalTest: myVar.test }
Object
> myVar.myinternalObj.internalTest();
//shows the alert
以下内容在JS控制台中工作:
> var myVar = {}
undefined
> myVar.test = function() { alert('hello'); }
function () { alert('hello'); }
> myVar.myinternalObj = { internalTest: myVar.test }
Object
> myVar.myinternalObj.internalTest();
//shows the alert