如何調用函數將確定方法中的值this
。在您的呼叫方式:
var method = obj.sayHello;
method();
你正在失去你的sayHello()
所以this
被設置爲全局對象或undefined調用內部的obj
參考this
,未設置爲obj
。因此,你得到的錯誤。
當你這樣做:
var method = obj.sayHello;
所有,它是把一個參考sayHello
功能在method
變量。與obj
存儲在method
無關。所以,當你再調用method()
,沒有對象的引用都這樣,而不是obj.sayHello()
導致this
設置爲obj
,你只是調用sayHello()
全部由自己不的this
值設置爲obj
。
有多種方法可以解決它。
1)助手功能。
var method = function() {obj.sayHello()};
method();
2)使用.bind()
這裏.bind()
將創建一個助手功能給你。
var method = obj.sayHello.bind(obj);
method();
3)變更sayHello()
方法
您可以更改sayHello()
方法,因此不使用this
指針(它工作正常,如果它是一個單獨的對象,但如果有多個實例):
sayHello:function() {
console.log("hello," + obj.name);
}