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是一个truefalse的布尔值,表示是否应将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对象是静态对象中对该对象的引用,因此每次实际保存时都会更改布尔值,以便将来调用该插件。