init函数如何在插件中工作?
很抱歉,如果这是一个基本问题,但我似乎对JQuery中的插件如何运作以及Google没有太多帮助有误解。
想象一下,我有:
methods = { init : function(opts){ options = $.extend(options, opts); return this.each(function(){ data = $(this).data('prodigal'); if(!data){ if(options.isActive === false){ $(options.tpl.overlay).css({ 'opacity': options.overlay.opacity }).appendTo('body'); options.isActive = true; } } }); } };
现在, options.isActive
是一个true
或false
的布尔值,表示是否应将options.tpl.overlay
选项添加到文档body
中。 它确保我的options.tpl.overlay
只附加一次到文档并且它可以工作,但我不确定它是如何工作的。
我打电话的时候:
$('.view_title_images').prodigal(); $('.glglg').prodigal();
它仍然只增加一次。 我总是被认为插件已经形成并且init函数调用你所做的每一次“调用”,即$('.view_title_images,.glglg').prodigal();
将形成并调用init
函数一次。
那么init
函数究竟是如何在JQuery插件中运行的呢?
不确定这是发生在这里的事情,但要注意$(this)
不是同一个对象,无论是在回调函数内部还是外部。
我看到这种行为,因为插件实际上是在第一次作为jQuery插件框架中的静态对象运行时实例化的。
因此,每次对init
函数的连续调用都将调用此全局对象。 由于options
对象是静态对象中对该对象的引用,因此每次实际保存时都会更改布尔值,以便将来调用该插件。