0

使用 jQuery 扩展功能并遇到了我试图扩展未定义的目标对象的情况。我没有收到任何错误,但源对象未按预期扩展。我曾假设 jQuery 会创建一个空白对象并扩展到该对象,但情况似乎并非如此。我可以通过自己创建空对象来解决这个问题,但我正在寻找一些确认,即 jQuery 的扩展就是这种情况。我在 jQuery Api 中找不到关于目标对象未定义的任何内容。

编辑:对不起,我应该包括一个 JSFiddle -在这里或看下面的例子。这样做需要修改我的问题。如果您查看小提琴选项对象存在,但我试图扩展的属性不存在。这就是我的问题所在。我猜 jQuery 不会以这种方式创建空属性。我需要手动将属性添加到对象中吗?

options = {newdata:true};

$("#click").click(function(){
  console.log(options);
  someFunc(options);
});

function someFunc(options) {
  $.extend(options.data, {
    someNewData: true
  });
  console.log(options);
}
4

1 回答 1

1

读取相关的jQuery 源文件

target = arguments[0] || {};

使用发送到的第一个参数jQuery.extend。如果它是假的或未定义的,将创建一个新的空对象。target 然后由jquery.extend.

如果您要执行以下操作:

var target = undefined;
var data = {'hello': 'world'};
jQuery.extend(target, data);

target还是会undefined。如果您想使用target可能未定义的 a,您必须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

于 2013-01-14T22:58:41.733 回答