今天碰到一個問題,有如下的兩個對象,問執行obj1.say()輸出什麼?
var obj1 = ( function() {
var inner = 'a-1'
return {
inner: 'a-2',
say: function() {
console.log( inner )
console.log( this.inner )
}
}
} )()
var obj2 = ( function() {
var inner = 'b-1'
return {
inner: 'b-2',
say: function() {
console.log( inner )
console.log( this.inner )
}
}
} )()
obj1.say = obj2.say;
obj1.say()
當執行obj1.say()的時候會輸出什麼呢?
思考一分鐘
你的答案是什麼呢?
是不是'a-1' 和 'a-2',如果是那恭喜你答錯了。
正確的答案應該是'b-1' 和 'a-2'。
至於爲什麼,console.log( this.inner ) 打印出'a-2'應該沒有什麼疑問,因爲這裏面的this是調用函數的調用者所指向的對象,在這裏
obj1.say()的調用者是obj1,所以this就指向他。
console.log( inner )爲什麼打印出'b-1',我也沒有想清楚,誰知道的話可以留言討論