将对象的引用传递给匿名函数

时间:2011-05-26 16:01:05

标签: jquery

我需要将对当前对象的引用传递给匿名函数。在Mootools中它会是这样的:

    this.start = function(){

        this.intervalId = setInterval(function(){

            this.elapsedTime ++;
            this.setTime();

        }.bind(this), 1000);
    }

但是我需要使用jQuery来完成它,并且jQuery不支持这样的语法。我能做什么?我试过了:

    this.start = function(){

        var thisObj = this;
        this.intervalId = setInterval(function(){

            thisObj.elapsedTime ++;
            thisObj.setTime();

        }, 1000);
    }

但看起来thisObj只是一个新对象,因为它在init方法中赋值的一些方法现在是空的。

请告知:)

2 个答案:

答案 0 :(得分:4)

您的代码应该有效,thisObj 引用新对象。它引用了this。如果此代码无效,则表示您未正确调用start(),甚至bind()也无法帮助您。

因此,您必须先修复代码,确保以正确的方式调用start(),例如myobj.start()

但无论如何,jQuery提供了$.proxy方法:

this.intervalId = setInterval($.proxy(function(){
    this.elapsedTime ++;
    this.setTime();
}, this), 1000);

.bind()相同。

答案 1 :(得分:1)

thisObj更改为全局,因此它存在于start函数之外。 {h} setInterval函数调用的方式不知道thisObj是什么

var thisObj = null;

this.start = function(){

    thisObj = this;
    this.intervalId = setInterval(function(){

        thisObj.elapsedTime ++;
        thisObj.setTime();

    }, 1000);
}

工作示例:http://jsfiddle.net/hunter/Swh9U/


为证明费利克斯的观点,OP的代码确实有用:http://jsfiddle.net/hunter/Swh9U/1/