3
我正在寻找扩大引导插件的正确方法,并发现了这样的回答:https://stackoverflow.com/a/12689534/1276032什么可能是使用jQuery.extend重写函数的原因?
什么困扰我,是最后一节 - 初始化覆盖。下面复制的代码:
// override the old initialization with the new constructor
$.fn.modal = $.extend(function(option) {
var args = $.makeArray(arguments),
option = args.shift();
return this.each(function() {
var $this = $(this);
var data = $this.data('modal'),
options = $.extend({}, _super.defaults, $this.data(), typeof option == 'object' && option);
if (!data) {
$this.data('modal', (data = new Modal(this, options)));
}
if (typeof option == 'string') {
data[option].apply(data, args);
}
else if (options.show) {
data.show.apply(data, args);
}
});
}, $.fn.modal);
我不明白为什么$ .extend在这种情况下使用 - 它有一定的效果,我没有看到?如果我执行此代码:
var f1 = function(){console.log(1);};
var f2 = function(){console.log(2);};
var f2 = $.extend(f1,f2);
f2();
然后只有1被打印到控制台,并且f1等于f2。所以,看似简单assingnment会做,
$.fn.modal = function(option) {...}
但也许我错过了什么......
Thx回复。我知道如何为对象扩展工作。我的问题的线索与一个案例有关,当函数作为参数传递时。你的建议(改变'f2 = $ .extend(f1,f2)'为'$ .extend(f2,f1)')并不能真正回答我的问题,因为我不想改变任何东西 - 我只想学习,为什么这个代码是一个公认的,并且实际上相当有争议的答案的一部分(目前32个upvotes)。此外 - 改变这个代码仍然没有扩展任何东西。结果始终是第一个参数的函数。 –