[英]Why the following snippet doesn't work in JS?
以下是代碼:
var myVar = {
test:function(){
alert('hello');
},
myinternalObj: {
internalTest: myVar.test
}
};
為什么在javascript中我無法將myVar.test分配給internalTest?
在將myVar
分配給對象myVar.test
之前,先評估myVar.test
,因此myVar
是未定義的,訪問undefined
或null
上的屬性會導致錯誤。
在internalTest: myVar.test
,尚未定義myVar(您仍在使用internalTest
屬性對其進行定義。
您需要更改為
var myVar = {
test:function(){
alert('hello');
}
};
myVar.myinternalObj = {
internalTest: myVar.test
};
引擎讀取myVar.test時,尚無值
myVar
在其自己的定義中未知,您應該這樣寫道:
var myVar = {
test:function(){
alert('hello');
}
};
myVar.myinternalObj = { internalTest : myVar.test };
這是因為您在myinternalObj中引用的對象尚未初始化。
一個更簡單的版本看起來像
var object = {a:'a', b: object.a};
當您在對象內部對其進行引用時,該對象的初始化尚未完成。
發生這種情況的原因是,當設置了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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.