Javascript类,在事件监听器中未定义var

时间:2014-10-28 09:45:39

标签: javascript class oop

var Foo = (function(){

    function Foo(){
        this._s="string";
        this.setButton();
    };

    Foo.prototype.setButton = function(){
document.getElementById('id').addEventListener('click', function(event) {
        alert(this._s);
    });
};

    Foo.prototype.method = function(){
        alert(this._s);
    }; 

    return Foo;

})();

var fo = new Foo();
fo.method();

我想将一个事件绑定到一个按钮,并执行一个使用'private'var的函数,当我单击该按钮时,该函数被正确调用但是它无法看到var this._s(它写''未定义“)。如果我写fo.method()字符串被正确打印。 这是jsfiddle:http://jsfiddle.net/wLm1v4La/1/

1 个答案:

答案 0 :(得分:1)

你必须在传递函数之前手动设置函数的上下文(this)。

 Foo.prototype.setButton = function () {
   var tmpFunc = function(evt){ alert(this._s); } //store the function
   var boundFunction = tmpFunc.bind(this); //set the context manually
   //pass the function now to eventlistener
   document.getElementById('id').addEventListener('click',boundFunction);
 };