jQuery中的$.Callbacks()
测试发现,如果回调的第一个参数是一个对象,而其中一个回调修改了对象的属性的话,那么后面的回调都会得到修改后的对象
by lmk123
JavaScript
var cbs = $.Callbacks(),
origalObj = {
test:'我本来应该是这样的'
};
function fn1( obj ) {
obj.test = '我修改了test属性';
}
function fn2( obj ) {
$('body').append('<br>第二个回调函数读取到的test属性:'+obj.test);
$('body').append('<br>原对象的test属性:'+origalObj.test);
}
cbs.add(fn1).add(fn2).fire(origalObj );
$('body').append('<br>结论:对象可能会被其它回调修改(因为对象通过引用传递)');
cbs = $.Callbacks('memory');
origalObj = {
test:'我本来应该是这样的'
};
cbs.add(fn1).add(fn2).fire(origalObj );
$('body').append('<br>结论:即使加上了 memory 标志也没用');