2014-09-28 26 views
0

在Javascript中我已經定義的對象是這樣的:在面向對象的Javascript傳遞對象構件的方法的事件處理程序

function myObject() { 
    this.x = 5; 
    window.addEventListener("resize", this.resizeHandler); 
} 

myObject.prototype.doSomething = function() { 
    alert(this.x); 
} 

myObject.prototype.resizeHandler = function() { 
    this.doSomething(); // Here occurs error. 
} 

var obj = new myObject(); 

但是我運行到錯誤消息「未捕獲類型錯誤:未定義是不是一個函數」 。問題是「爲什麼?」解釋會很棒!

在此先感謝。

+1

*「解釋會很棒!」*解釋是你傳遞函數而不是對象。函數本身就是對象,可以像任何其他對象一樣傳遞和引用。正因爲如此,您可以讓多個對象引用相同的函數,或者沒有引用它的對象。沒有「所有者」對象這樣的東西。因爲函數中'this'的值通常是基於該函數的調用方式,所以需要以這種方式調用它,以便隱式或顯式地「告訴」函數「this」值應該是什麼。 – 2014-09-28 18:57:00

回答

4

你需要確保的this情況下是正確的......

function myObject() { 
    this.x = 5; 
    window.addEventListener("resize", this.resizeHandler.bind(this)); 
} 

myObject.prototype.doSomething = function() { 
    alert(this.x); 
} 

myObject.prototype.resizeHandler = function() { 
    this.doSomething(); // Here occurs error. 
} 

這裏.bind(this)使用。

this更改用作事件處理函數的函數。

+1

小腳註:在IE <9中不支持#bind。可以在此處找到填充:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Compatibility – Bart 2014-09-28 18:53:28

+0

謝謝,這意味着要提及... :) – jcreamer898 2014-09-28 19:34:44

相關問題