使用jQuery扩展功能并遇到了我试图扩展未定义的目标对象的情况。我没有收到任何错误,但源对象没有按预期扩展。我曾假设jQuery会创建一个空白对象并扩展到那个但是情况似乎并非如此。我可以通过自己创建空对象来解决这个问题,但我正在寻找一些确认,这是jQuery扩展的情况。我在jQuery Api中找不到任何关于目标对象未定义的内容。
编辑:对不起,我应该包含一个JSFiddle - Here或参见下面的示例。这样做需要修改我的问题。如果您查看小提琴,则选项对象存在,但我尝试扩展的属性不存在。这就是我的问题所在。我猜jQuery不会以这种方式创建空属性。我需要手动将属性添加到对象?
options = {newdata:true};
$("#click").click(function(){
console.log(options);
someFunc(options);
});
function someFunc(options) {
$.extend(options.data, {
someNewData: true
});
console.log(options);
}
答案 0 :(得分:1)
阅读相关的jQuery source file
target = arguments[0] || {};
使用发送到jQuery.extend
的第一个参数。如果它是假的或未定义的,将创建一个新的空对象。然后target
返回jquery.extend
。
如果您要执行以下操作:
var target = undefined;
var data = {'hello': 'world'};
jQuery.extend(target, data);
target
仍为undefined
。如果您想使用可能未定义的target
,则必须使用jQuery.extend
,如下所示:
var target = undefined;
var data = {'hello': 'world'};
target = jQuery.extend(target, data);
使用示例代码,您需要执行此操作:
function someFunc(options) {
options.data = $.extend(options.data, {
someNewData: true
});
console.log(options);
}
请注意jQuery.extend
的返回值是如何分配给options.data
的。