我正在尝试在插件中使用默认选项的扩展。但是它并不像文档中描述的那样工作。
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酷炫
发布于 2009-06-30 23:29:22
你的代码:
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中的同一变量的引用。
发布于 2009-10-08 15:15:23
但是,如果你再深入一点,就会发现有些问题:
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“,谁能解释一下原因吗?
发布于 2009-11-18 18:18:57
嗯..。如果你写var settings = $.extend(empty, options, defaults);呢?我想你会有全套options+defaults道具的设置。其中dafaults将覆盖具有相同名称的选项。这是你想要的吗?
BTW defaults表示默认值。这样,您就可以不再设置强制参数。这就是为什么设置必须用设置覆盖默认值的原因。难到不是么?这就是为什么你的样本是正确的,而我的样本是奇怪的;)但回答了你的问题(我希望)。
https://stackoverflow.com/questions/1066588
复制相似问题