开发者问题收集

$.each() jquery 中未定义变量

2014-04-16
1227

我在 javascript 中使用此类:

function rMotoristaList() {
}

rMotoristaList.prototype.permInsert = false;
rMotoristaList.prototype.permSelect = false;
rMotoristaList.prototype.permUpdate = false;
rMotoristaList.prototype.permDelete = false;

rMotoristaList.prototype.init = function() {
    // Pega as permissoes
    var perm = new cPermissao();
    this.permInsert = perm.verificaPermissao(ID_CAD_MOTORISTAS, "insert");
    this.permUpdate = perm.verificaPermissao(ID_CAD_MOTORISTAS, "update");
    this.permDelete = perm.verificaPermissao(ID_CAD_MOTORISTAS, "delete");

    if (this.permInsert == false) {
        $("#btn-add-novo").hide();
    }
};

rMotoristaList.prototype.renderGrid = function(data) {
    var html = "";

    // Faz o loop em todos os elementos retornados
    $.each(data,function(index, motorista) {
        if (this.permUpdate != false) {
            //Do something
        }
    }
};

属性 permUpdatefalse ,但是,当我在 $.each() 内部比较它时,不起作用,我收到了一个 undefined

如何在 $.each() 中获取 this.permUpdate 的值?

3个回答

匿名函数内部的 this 将不会引用 rMotoristaList 。您可以缓存 this 并使用它。

rMotoristaList.prototype.renderGrid = function(data) {
    var html = "",
        self = this;

    // Faz o loop em todos os elementos retornados
    $.each(data,function(index, motorista) {
        if (self.permUpdate != false) {
            //Do something
        }
};
2014-04-16

$.each() 中的 this 指的是 .each() 的函数上下文,而不是代码中的上下文。您可以做的是将上下文保存在 .each() 块之外,在 JavaScript 中它被称为闭包,请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

rMotoristaList.prototype.renderGrid = function(data) {
    var html = "";
    var that = this;
    // Faz o loop em todos os elementos retornados
    $.each(data,function(index, motorista) {
        if (that.permUpdate != false) {
        //Do something
        }
    }

} ;

Amy
2014-04-16

还有另一种方法,在这种情况下可能会更好一些...

rMotoristaList.prototype.renderGrid = function(data) {
    var html = "";

    // Faz o loop em todos os elementos retornados
    $.each(data,function(index, motorista) {
        if (this.permUpdate != false) {
            //Do something
        }
    }.bind(this)); // <-- Bind the function to the right context.
};

这样你实际上是在说,这个函数应该在 rMotoristaList 实例的上下文中执行。

FredyC
2014-04-16