對象賦值時this指向問題 obj1.say = obj2.say;obj1.say()

今天碰到一個問題,有如下的兩個對象,問執行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',我也沒有想清楚,誰知道的話可以留言討論

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章