我在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
}
}
};
attrbitue permUpdate
是false
,但是,当我在$ .each()内部比较他时,不起作用,我会收到undefined
。
如何在this.permUpdate
内获得$.each()
的价值?
答案 0 :(得分:2)
在匿名函数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
}
};
答案 1 :(得分:1)
this
内的$.each()
是指.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
}
}
};
答案 2 :(得分:1)
还有另一种方法,在这种情况下可能会有所改善......
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实例的上下文来执行。