一個奇怪的問題:關於JavaScript的原型關於JavaScript的原型
(function(w){
if(!w)
return;
var TestJS = function(){
};
TestJS.prototype = {
data:{},
initData:function(){
this.data={
val_name_1 : 1,
val_name_2 : 2,
val_name_3 : "hello-3"
};
console.log(this.data);
return this;
},
TestChildJS:{
initChild:function(){
console.log(TestJS);
console.log(TestJS.data);
console.log(new TestJS().data.val_name_1);
console.log(TestJS.data.val_name_1);
}
}
};
window.TestJS = new TestJS();
})(window);
爲什麼 'TestChildJS' 不能讓 'val_name_1'?
TestJS.initData();
console.log(TestJS.TestChildJS.initChild());
所以我必須寫我的代碼這樣的:
(function(w){
if(!w)
return;
var TestJS = function(){
};
TestJS.prototype = {
data:{},
initData:function(){
this.data={
val_name_1 : 1,
val_name_2 : 2,
val_name_3 : "hello-3"
};
console.log(this.data);
this.TestChildJS.initParentData(this);
return this;
},
TestChildJS:{
parentData:{},
initParentData:function(parent){
this.parentData = parent.data;
return this;
},
initChild:function(){
console.log(this.parentData);
}
}
};
window.TestJS = new TestJS();
})(window);
如何使用第一種方式可以得到的第二種方式的內容?
因爲'initChild'中的'TestJS'不是**'window.TestJS' ...和''TestJS()。data'中的'data',根據您的代碼的定義,直到'initData'運行的對象 –
順便說一句,'(函數(窗口){...}(窗口))'是毫無意義的。如果你想明確地訪問全局對象,使用* this *,如:(function(window){...}(this))'注意在非瀏覽器主機中,* window *將是全局對象而不是一個Window對象。 – RobG
@JaromandaX thx,在第一個代碼的initChild()方法中,我可以得到如下的數據:console.log(window.TestJS.data.val_name_1); –