1
(function($){
    $.fn.the_func = function() {

        function my_func(){
            alert('it works');
        }

        my_func();

        // other code

    };
})(jQuery);

$(window).load(function(){
    my_func(); // This way?
    $.the_func().my_func(); // Or this way? No?
    $.the_func.my_func(); // No?
    // ?
});

$(document).ready(function(){
    $('div').the_func();
});

如何在包装它的函数之外调用这个函数?
我想my_func()在这个代码示例中调用。
(window-load 函数只是一个例子。)
我想my_func()从“无处不在”调用而不执行the_func(). 但我想使用the_func(). 我想更新存储在参数中的
值。my_func()the_func()

4

1 回答 1

2

这是我通常如何编写插件并可以应用于您的情况的示例:

http://jsfiddle.net/pMPum/1/

(function ($) {
    function my_func(element) {
        console.log("it works: " + element.innerHTML);
    }

    var methods = {
        init: function (options) {
            console.log("from init");
            console.log("options for init: " + JSON.stringify(options));
            my_func(this);
        },

        my_func: function (options) {
            console.log("from my_func");
            console.log("options for my_func: " + JSON.stringify(options));
            my_func(this);
        }
    };

    $.fn.the_func = function (method) {
        var args = arguments;
        var argss = Array.prototype.slice.call(args, 1);

        return this.each(function () {
            if (methods[method]) {
                methods[method].apply(this, argss);
            }
            else if (typeof method === "object" || !method) {
                methods.init.apply(this, args);
            }
            else {
                $.error("Method " + method + " does not exist on jQuery.the_func");
            }
        });
    };
})(jQuery);

$(document).ready(function () {
    $("div").the_func({    // Same as passing "init" and { } as params
        test: "testing"
    });
});

my_func请注意我是如何在可以调用的范围内创建一个通用函数的。my_funcin 方法methods是通过插件语法向世界公开的,.the_func()函数my_func是私有的,不能直接访问。

调用不同方法的语法与大多数/大量 jQuery 插件相同。

于 2012-11-29T14:44:04.597 回答