2012-12-05 55 views
0

我有這樣的構造函數對象。獲取js中的函數bind作爲事件的引用。

var Cons = function(me){ 
    this.name= me; 
    this.ele = document.getElementById("element"); 
    this.ele.addEventListener("click",this.fnClick,false); 
} 

和一些方法擴展爲原型

Cons.prototype.getme= function(){ 
    return this.me; 
    } 
    Cons.prototype.fnClick= function(){ 
     alert(this.getme()) 
    } 
var initZ = new Cons("test"); 

所以當IM「fcClick」作爲綁定功能「這個」將引用綁定的HTML元素,而不是執行我的問題是當前實例對象,

那麼如何在「fnClick」中通過「這個」的引用?

的jsfiddle link

回答

2

使用this.fnClick.bind(this),或者對於不支持綁定的瀏覽器:

var Cons = function(me){ 
    this.name= me; 
    this.ele = document.getElementById("element"); 

    var self = this; 
    function handler() { 
    self.fnClick(arguments); 
    } 
    this.ele.addEventListener("click", handler, false); 
} 

http://jsfiddle.net/Fy5ZV/1/(與getme()返回this.name

+0

YS actualy我希望它像一個自我參照,但我不能綁定私人FN處理程序,因爲我需要在其他函數中做一個removeEvent,並且我不能聲明公共函數,它是框架的一部分.. – Sarath

+0

您可以實現'Function.prototype.bind'的填充,請參閱[here ](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Obj ects/Function/bind),* Compatibility *部分。 –

1

您可以使用bind() ...

var Cons = function(me){ 
    this.name= me; 
    this.ele = document.getElementById("element"); 
    this.ele.addEventListener("click",this.fnClick.bind(this),false); 
} 

這將保證ThisBinding將被設置爲調用環境的this

相關問題