$(document).ajaxComplete上的原型

时间:2013-10-29 12:18:16

标签: javascript jquery ajax prototype

无法理解为什么在ajaxComplete获得新值后ErrorHandler.prototype.errorsBasket

var ErrorHandler = function() {
  var _this = this;
  $(document).ajaxComplete(function() {
    _this.errorsBasket.push([1]);
  });
};

ErrorHandler.prototype.errorsBasket = [];
ErrorHandler.prototype.errorsBasket1 = [];

var a = new ErrorHandler();
a.errorsBasket1 = [2];
$.get('/');

$(document).ajaxComplete(function() {
  why ->> console.log(ErrorHandler.prototype.errorsBasket); // [Array[1]] 
  console.log(ErrorHandler.prototype.errorsBasket1); // []
});

链接:http://jsfiddle.net/nBXAY/1/

1 个答案:

答案 0 :(得分:0)

这样做:

$(document).ajaxComplete(function() {
    _this.errorsBasket.push([1]);
});

您正在更改ErrorHandler对象的值,它会为每new ErrorHandler更改一次。

这样做时:

var a = new ErrorHandler();
a.errorsBasket1 = [2];

您正在为a分配一个新值,这意味着如果您删除此行:

ErrorHandler.prototype.errorsBasket1 = [];

并且

a.errorsBasket1 = [2];

它会起作用但是

a.errorsBasket1; //without a.errorsBasket1 = [2];

将是未定义的。

但是这个:

console.log(a.errorsBasket1); //without a.errorsBasket1 = [2];
ErrorHandler.prototype.errorsBasket1 = [0];
console.log(a.errorsBasket1);

将给出

undefined
[0]

虽然:

console.log(a.errorsBasket1); //with a.errorsBasket1 = [2];
ErrorHandler.prototype.errorsBasket1 = [0];
console.log(a.errorsBasket1);    

将给出

[2]
[2]

总之,ErrorHandler.prototype.errorsBasket1 = [];只是一种为对象分配默认值的方法。