首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带3个参数的jquery.fn.extend

带3个参数的jquery.fn.extend
EN

Stack Overflow用户
提问于 2009-06-30 23:24:03
回答 3查看 1.7K关注 0票数 1

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

代码语言:javascript
复制
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..which,则表示它有overridden...any注释

THnks酷炫

EN

回答 3

Stack Overflow用户

发布于 2009-06-30 23:29:22

你的代码:

代码语言:javascript
复制
var empty = {}
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var settings = $.extend(empty, defaults, options);

..。结果是...

代码语言:javascript
复制
settings == { validate: true, limit: 5, name: "bar" }
empty    == { validate: true, limit: 5, name: "bar" }

这正是documentation说它应该做的:

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2009-10-08 15:15:23

但是,如果你再深入一点,就会发现有些问题:

代码语言:javascript
复制
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“,谁能解释一下原因吗?

票数 0
EN

Stack Overflow用户

发布于 2009-11-18 18:18:57

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

BTW defaults表示默认值。这样,您就可以不再设置强制参数。这就是为什么设置必须用设置覆盖默认值的原因。难到不是么?这就是为什么你的样本是正确的,而我的样本是奇怪的;)但回答了你的问题(我希望)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1066588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档