21

从 $.each() 中访问我的 this.rules 变量的最佳方法是什么?任何解释为什么/如何也会有帮助!

app.Style = function(node) {
    this.style = node;
    this.rules = [];
    var ruleHolder = node.find('Rule');

    $.each(ruleHolder, function(index, value) {
        var myRule = new app.Rule($(ruleHolder[index]));
        this.rules.push(myRule);
    });

    console.log(this.rules)
}
4

3 回答 3

23

在调用之前存储对this-- 命名它的引用self,例如 -- ,.each()然后rules使用self.rules

app.Style = function(node) {
    this.style = node;
    this.rules = [];
    var ruleHolder = node.find('Rule');

    var self = this;
    $.each(ruleHolder, function(index, value) {
        var myRule = new app.Rule($(ruleHolder[index]));
        self.rules.push(myRule);
    });

    console.log(this.rules)
}
于 2012-09-06T22:22:13.277 回答
0

João Silva 的上述答案不是一个好的解决方案,因为它创建了一个全局变量。您实际上并没有通过引用将“self”变量传递给每个函数,而是引用了全局“self”对象。

在上面的示例中,“this”是窗口对象,设置“var self = this”实际上并没有做任何事情。

Window 对象有两个自引用属性,window 和 self。您可以使用任一全局变量直接引用 Window 对象。

简而言之,window和self都是对Window对象的引用,它是客户端javascript的全局对象。

创建一个闭包函数是一个更好的解决方案

显示窗口和自我比较的屏幕截图

于 2017-06-20T21:28:03.100 回答
0

没有它更优雅var self = this;

app.Style = function(node) {
    this.style = node;
    this.rules = [];
    var ruleHolder = node.find('Rule');

    $.each(ruleHolder, function(index, value) {
        var myRule = new app.Rule($(ruleHolder[index]));
        this.rules.push(myRule);
    }.bind(this));

    console.log(this.rules)
}
于 2018-03-14T10:16:33.477 回答