4

在对象函数中使用 jQuery 方法(即 - .each())时,“this”变量将引用被迭代的对象。没有“this”如何访问对象的功能?我意识到这有点令人困惑,所以:

test.prototype.init = function(node) {
    node.children().each(function() {
        //call test.anotherFunction() here
        //Would normally call this.anotherFunction(), 
        //  but "this" refers to the current child.
    });
}
test.prototype.anotherFunction = function() {
    //whatever
}

帮助?

4

3 回答 3

7

将 的副本保存this到局部变量中(self在此示例中命名,但您可以将其命名为任何您想要的名称)并在嵌入函数中使用保存的副本:

test.prototype.init = function(node) {
    var self = this;
    node.children().each(function() {
        // use self here to reference the host object
    });
}
test.prototype.anotherFunction = function() {
    //whatever
}
于 2012-08-16T20:24:40.067 回答
3

您还可以使用该.bind函数来更改函数的上下文。您提供的任何参数都.bind将在函数执行时成为函数的所有者,因此this.

test.prototype.init = function(node) {
    node.children().each(function(i,el) {
        // this = test.prototype
        // i = index of the current child of `node`
        // el = HTML node of current child
        // $(el) = jQuery object representing current child
    }.bind(this));
};
于 2012-08-16T20:31:59.357 回答
1

您可以在迭代之前定义要引用的对象。您将能够接近它,因为它仍在范围内。

var currentObject = this;

test.prototype.init = function(node) {
    node.children().each(function() {
        currentObject.anotherFunction();
    });
}
test.prototype.anotherFunction = function() {
    //whatever
}
于 2012-08-16T20:26:37.860 回答