2012-09-10 69 views
2

使用以下代碼,如何調用方法my_method以便打印全局對象(窗口)?Javascript,從靜態函數打印全局對象

MyClass = function() { 
     this.my_method = function() { 
     console.log(this); 
     } 
    } 
    var myobject = new MyClass(); 

這不是一個功課,但我一直在問一個問題,並且我不明白,因爲我不深的JavaScript知道。

所以,如果有人能幫助我理解,並給我一個很好解釋的答案,我會很高興!

回答

4

可以bind功能爲null:

MyClass = function() { 
     this.my_method = function() { 
     console.log(this); 
     } 
    } 
    var myobject = new MyClass(); 
    myobject.my_method = myobject.my_method.bind(null); 
    myobject.my_method(); // this will log the DomWindow object 

這是因爲當一個函數的上下文爲null或undefined,this是全局對象。

ECMAScript reference

  1. 如果函數代碼是嚴格代碼,設定ThisBinding到thisArg。
  2. 否則,如果thisArg爲null或未定義,請將ThisBinding設置爲全局對象。
2

您也可以使用callapply改變功能的情況下。

var myobject = new MyClass(); 
myobject.my_method.call(this); 
myobject.my_method.apply(this); 

如果您不需要永久綁定或者您想要動態更改上下文,這可能會很好地工作。