将“this”对象发送回回函数的最佳方法

时间:2014-02-27 18:28:56

标签: javascript jquery performance

最近我的很多代码看起来都像这样......

function MyObjectClass (selector) {
    this.color  = "red";
    this.$elt   = $(selector);
    // ... any other object vars here ...

    // Example method for the object
    this.showThenUpdateColor = function () { 
        // Keep a copy of "this" to use for callbacks
        var o = this;
        // Example of jQuery function that accepts a callback           
        o.$elt.fadeIn(function(){ 
            // Inside of this callback function we need to access the main object
            o.$elt.css({
                "background-color" : o.color // This is where we need the "o"
            });
        });
    }
}
var myObject = new MyObjectClass('#myObject');
myObject.showThenUpdateColor();

...我在对象方法中有一个回调。通常我将对象本身(“this”)分配给局部变量(通常为“o”,因为它简短易用),可以在回调中使用。

这是最佳使用内存吗?是否存在内存泄漏的危险?还有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

我建议您查看jQuery.proxy()。它允许您创建一个函数,该函数在执行时会在您指定的范围内执行另一个函数。然后你可以写:

this.showThenUpdateColor = function () { 
    // Example of jQuery function that accepts a callback           
    this.$elt.fadeIn($.proxy(this._onFadeInComplete, this));
}

function _onFadeInComplete() {
    this.$elt.css({
        "background-color" : this.color
    });
}