以下幾段代碼,輸出的結果不一樣。希望有大神可以解答一下原理,謝謝!
var?myvar?=?"TheWindow";
var?object?=?{
myvar?:?"MyObject",
getVar?:?function(){
return?function(){
return?myvar;
};
}
};
console.log(object.getVar()());//輸出TheWindow
function?MyCont(){
var?myvar?=?"MyObject";
this.getVar?=?function(){
return?function(){
return?myvar;
};
}
}
var?obj?=?new?MyCont();
console.log(obj.getVar()());//輸出MyObject
然后我修改了一下,加上了this,輸出結果又不同了。
var?myvar?=?"TheWindow";
var?object?=?{
myvar?:?"MyObject",
getVar?:?function(){
return?function(){
return?this.myvar;//此處加入了this,依舊輸出TheWindow
};
}
};
console.log(object.getVar()());
function?MyCont(){
var?myvar?=?"MyObject";
this.getVar?=?function(){
return?function(){
return?this.myvar;//此處加入了this,輸出變成了TheWindow,而不是原先的MyObject
};
}
}
var?obj?=?new?MyCont();
console.log(obj.getVar()());
然后我再改一下
var?myvar?=?"TheWindow";
var?object?=?{
myvar1?:?"MyObject",
getVar?:?function(){
return?function(){
return?myvar1;//雖然object內含有myvar1屬性,但是這樣寫會報錯,但是如果寫this.myvar1的話就不報錯,輸出undefined
};
}
};
console.log(object.getVar()());
var?myvar?=?"TheWindow";
var?object?=?{
myvar?:?"MyObject",
getVar?:?function(){
??return?myvar;//此處去掉了function,還是輸出TheWindow
}
};
console.log(object.getVar());
var?myvar?=?"TheWindow";
var?object?=?{
myvar?:?"MyObject",
getVar?:?function(){
??return?this.myvar;//對比上面,加入了this,則輸出的是對象屬性MyObject
}
};
console.log(object.getVar());
最后還是要感謝一下,好心人幫忙解答問題,萬分感謝!
javascript對象、this、作用域和閉包的問題。
云淡風輕的天空
2016-10-29 01:02:50