Jquery / JS:在Jquery-function之外调用Jquery函数的函数

时间:2012-11-29 14:02:39

标签: javascript jquery function

(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() (窗口加载功能只是一个例子。)
我想从“无处不在”调用my_func()而不执行the_func()中的其他函数或代码。但我想使用the_func()的变量 使用my_func()我想更新存储在the_func()

参数中的值

1 个答案:

答案 0 :(得分: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_func中的methods方法是通过插件语法.the_func()向全世界展示的内容,my_func函数是私有的,无法直接访问。

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