2012-12-05 20 views
0

我有一個構造函數對象。在這個構造函數中,我有兩個函數。一個叫做window.onresize另一個是onBrowserResize。現在我想打電話onBrowserResize裏面的window.onresize函數。我該怎麼做呢?在window.onresize中調用一個函數。 (範圍)

function MyObject() { 
    window.onresize = function(event) { 
     this.onBrowserResize(); 
    } 

    this.onBrowserResize = function() { 
    } 
} 

我想有功能的公共所以我可以這樣調用:object.onBrowserResize();

如果我做的函數私有這樣的:var onBrowserResize = function()我就不能訪問它的範圍之外。

任何人都有一個想法如何做到這一點?我可能對物體的範圍有點困惑。

+0

@Magus窗口是在瀏覽器窗口,從而不,我由可變。所以當我進入窗口函數時,這將引用窗口而不是我的對象。 – user1081577

回答

1

在JavaScript中,this的值取決於函數的調用方式。詳細信息請參見the MDN article on this

您的問題缺少一些細節。我的回答是假設你有這樣的事情:

var MyObj = function() { 
    window.onresize = function(event) { 
     this.onBrowserResize(); 
    } 

    this.onBrowserResize = function() {} 
} 

這是實例化這樣的:

var myObj = new MyObj(); 

這裏有一些方法來實現這一目標。

1.剛好路過this.onBrowserResize作爲事件處理(去最簡單的方法,如果您的所有在onResize處理程序是調用onBrowserResize):

var MyObj = function() { 
    window.onresize = this.onBrowserResize; 
    this.onBrowserResize = function() { 
     // caution: "this" here won't be your object. 
     // use option 3 below if you need this to be your object 
    } 
} 

2.高速緩存的參考當地this

var MyObj = function() { 
    var that = this; 
    window.onresize = function(event) { 
     that.onBrowserResize(); 
    } 

    this.onBrowserResize = function() {} 
} 

3.固定this值與Function.prototype.bind

var MyObj = function() { 
    window.onresize = this.onBrowserResize.bind(this); 

    this.onBrowserResize = function() {} 
} 
+0

謝謝,我用選項二,因爲我認爲它看起來最乾淨。這是人們常見的問題,並以這種方式解決? – user1081577

+1

是的,由於'this'在js中的行爲方式,這是非常普遍的。有點奇怪,如果你習慣了傳統的基於類的語言,但你已經習慣了它......如果你使用選項#3,你不會有任何意外(例如onBrowserResize裏面的'this'將會成爲你的對象,而不是其他2個選項中的'window')。 – bfavaretto

+0

奧克謝謝你的額外澄清。我正在使用方法#3。 – user1081577

1
//Constructor Object 
function MyObject(){ 

}; 

MyObject.prototype.onWindowResize = function(){ 
    this.onBrowserResize(); 
} 

MyObject.prototype.onBrowserResize = function(){ 

} 

    //Implementation 
    var myObject = new MyObject(); 
    myObject.onWindowResize(); 
    myObject.onBrowserResize(); 
+0

謝謝,但我的意思是window.onresize函數不在onWindowResize。 – user1081577