我正在尝试使用扩展名作为插件中的默认值,选项。但它不像文档中描述的那样工作。
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
答案 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默认值表示默认值。这样你就可以停止制作强制性参数了。这就是为什么设置必须通过设置覆盖默认值。不是吗?这就是为什么你的样本是正确的,我的是奇怪的;)但回答你的问题(我希望)。