jquery.fn.extend有3个参数

时间:2009-06-30 23:24:03

标签: jquery

我正在尝试使用扩展名作为插件中的默认值,选项。但它不像文档中描述的那样工作。

var empty = {}
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var settings = $.extend(empty, defaults, options);

这里的设置应该是合并默认值和选项,而不修改默认值。

但是警报(settings.validate)显示为true ..这意味着它已被覆盖...任何评论

THnks COOOL

3 个答案:

答案 0 :(得分:2)

您的代码:

var empty = {}
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var settings = $.extend(empty, defaults, options);

......导致......

settings == { validate: true, limit: 5, name: "bar" }
empty    == { validate: true, limit: 5, name: "bar" }

这正是documentation所说的应该做的事情:

  

jQuery.extend( [deep], target, object1, [objectN] )

     

使用一个或多个其他对象扩展一个对象,返回修改后的对象。

它修改变量empty并返回对同一变量的引用,该变量存储在settings中。

答案 1 :(得分:0)

如果再深入一点,那就有问题了:

var empty = {};
var defaults = { validate: false, limit: 5, name: "foo", buttons : {}};
var options = { validate: true, name: "bar"};
var settings = $.extend(empty, defaults, options);

settings.buttons['Ok']  = 
    function()
    {
        alert( "TEST");
    };

此代码运行后,defaults.buttons包含[“Ok”]任何人都可以解释原因吗?

答案 2 :(得分:0)

嗯...如果你写var settings = $.extend(empty, options, defaults);? 我想你会设置全套选项+默认道具。 dafaults将覆盖具有相同名称的选项。 这是你想要的吗?

BTW默认值表示默认值。这样你就可以停止制作强制性参数了。这就是为什么设置必须通过设置覆盖默认值。不是吗?这就是为什么你的样本是正确的,我的是奇怪的;)但回答你的问题(我希望)。