0

这是一个例子。这是根据此处的文档创建的简单函数:http: //docs.jquery.com/Plugins/Authoring

(function ($) {
    var methods = {
        init: function (options) {
            // Gets called when no arg provided to myFunction()
        },
        doTask1: function () {
            // Do task #1
        },
        doTask2: function () {
            // Do task #2
        }
    };

    function HelperMethod(item) {
        // some handy things that may be used by one or more of the above functions
    }

    // This bit comes straight from the docs at http://docs.jquery.com/Plugins/Authoring
    $.fn.myFunction = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method == "object" || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error("Method " + method + " does not exist on jQuery.dcms");
            return null;
        }
    };
})(jQuery);

我可以像这样调用函数:$('body').myFunction();,或$('body').myFunction("doTask1");

是否有一种惯用的和/或方便的方式来改变用户的偏好,通过调用类似的方法$('body').myFunction("changePref", "myPrefs");,或者可能$('body').myFunction("{changePref: myPrefs}");

或者我最好只为用户偏好创建一个单独的函数,只将首选项作为参数?

4

1 回答 1

1

事实证明,我init可以处理任意数量的选项。此外,制作单独的函数被认为是不好的做法,因为这会导致命名空间混乱。请参阅 http://docs.jquery.com/Plugins/Authoring。在标题命名空间下获得一些好的文档。

所以这是一个片段,带有一点评论:

(function ($) {
    var methods = {
        init: function (options) {
            // Gets called when no arg provided to myFunction()
            // Also attempts to make use of whatever options provided if they
            // don't match the options below.
        },
        doTask1: function () {
            // Do task #1
        },
        doTask2: function () {
            // Do task #2
        }
    };
//...

myFunction()只要我在函数中处理它们,我应该能够传递我想要的任何参数。

于 2013-01-25T17:59:19.927 回答