0

抱歉,如果这是一个基本问题,但我似乎对 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;
                }
            }
        });
    }
};

Nowoptions.isActive是一个布尔值trueorfalse来表示是否options.tpl.overlay应该将选项添加到body文档中。它确保我options.tpl.overlay只向文档附加一次并且它可以工作,但我不确定它是如何工作的。

当我打电话时:

$('.view_title_images').prodigal();
$('.glglg').prodigal();

它仍然只添加一次。我总是被引导相信插件已经形成,并且每次“调用”都会调用 init 函数,即$('.view_title_images,.glglg').prodigal();会形成并调用该init函数一次。

那么该init函数究竟是如何在 JQuery 插件中运行的呢?

4

2 回答 2

0

不确定这是这里发生的事情,但请注意,无论$(this)是在回调函数内部还是外部,这都不是同一个对象。

于 2012-12-05T12:53:41.247 回答
0

我看到这种行为是因为该插件实际上是在第一次作为 jQuery 插件框架中的静态对象运行时实例化的。

所以每次连续调用该init函数都会调用这个全局对象。由于options对象是静态对象中对该对象的引用,因此每次更改布尔值实际上都会保存以供将来调用插件。

于 2012-12-10T11:19:42.667 回答