JQuery动画完整功能:如何恢复我的“旧这个”?

时间:2012-07-21 07:41:43

标签: javascript jquery jquery-animate

我开始使用jQuery,我遇到了以下问题:

function AClass(){
    this.attribute = /*something*/
}

AClass.prototype.COMPLETE= function() {
    /*FROM HERE I WANT TO ACCESS TO THE ABOVE "this.attribute"!!*/
}

AClass.prototype.doSomething = function() {
    $("something").animate(..,..,.., this.COMPLETE);
}

所以,这就是我面临的问题。从完整的动画功能,我想访问AClass属性的值。问题是在那个上下文中this指向动画的DOM元素,不再指向调用者对象。

2 个答案:

答案 0 :(得分:0)

在变量中保存对原始this的引用:

function AClass(){
    this.attribute = /*something*/
    var self = this;

    AClass.prototype.COMPLETE= function() {
        /* Use: self.attributes */
    }

    AClass.prototype.doSomething = function() {
        $("something").animate(..,..,..,COMPLETE);
    }
}

答案 1 :(得分:0)

您可以使用$.proxy() method将特定上下文绑定到回调。或者,如果您不关心旧浏览器(即IE< 9),您可以使用(JS 1.8.5).bind() method。基本上你需要提供yourFunction作为回调放置:

$.proxy(yourFunction, theRequiredContext)
// or
yourFunction.bind(theRequiredContext)

在示例代码的上下文中:

function AClass(){
    this.attribute = /*something*/
}

AClass.prototype.COMPLETE= function() {
    /*FROM HERE I WANT TO ACCESS TO THE ABOVE "this.attribute"!!*/
}

AClass.prototype.doSomething = function() {
    $("something").animate(..,..,..,$.proxy(this.COMPLETE, this));
}

演示:http://jsfiddle.net/P9mbG/