JQuery.ajax()接受一个settings
参数。success
or的函数error
(例如)在这个对象的上下文中运行。
var arr = [];
var a = {
url : '/',
arbiteraryProperty: 'yeah!',
complete:function () {
console.dir(arr[0]);
}
};
arr.push( a );
$.ajax( a );
运行命令,然后打印 arr 的第一个元素(即 a)的属性,如下所示:
arbiteraryProperty : "yeah!" url : "/" complete : function()
现在的问题是this
上述complete
函数中的关键字实际上并不是指settings
对象。这很有趣,因为 JQuery 似乎正在制作settings
对象的副本。
var arr = [];
var a = {
url : '/',
arbiteraryProperty: 'yeah!',
complete:function () {
console.log(this.arbiteraryProperty );
//this prints 'yeah!'
this.arbiteraryProperty = 'nope!';
console.log( this.arbiteraryProperty );
//this prints 'nope!' so the value of the attribute in this is changed
console.log( a.arbiteraryProperty );
//this prints 'yeah!' ie. the value originally existed in the settings object
}
};
arr.push( a );
$.ajax( a );
问题是:JQuery 真的会创建设置对象的副本吗?如果是,我该如何强制它使用我的对象?
我有一个应用程序,我需要将这些对象保存在队列中,并希望它们在运行时得到更新。我想另一种选择是context
使用$.ajax()
. 但是,此函数的这种行为(制作设置对象的副本)并未记录在案。还是我错过了?