当目标未定义时,jQuery是否扩展创建空对象

时间:2013-01-14 22:53:02

标签: jquery

使用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);
}

1 个答案:

答案 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的。