我想按照一些有趣的jQuery模式(基本上是Builder和Prototype)来开发一个库。我试图阅读jQuery源并搜索教程,但没有得到任何帮助。

我的想法是允许这种类型的访问:


grace(...)可直接调用
grace.set(...)可以有方法
grace.fn.get = ...可以设置新方法


The most I got was this

(function(window, undefined) {

    "use strict";

    //
    var grace = function(options) {
        return new grace.fn.init(options);
    };

    //
    grace.fn = grace.prototype = {
        //
        set: function() {
            alert("grace.set() OK");
        },

        //
        init: function() {
            alert("grace() OK");
        },
    };

    //
    window.grace = grace;

})(window);


它可以直接调用,但无法访问其方法。

最佳答案

应该将extend方法添加到gracegrance.fn,并且当您要将新方法添加到grace时,请使用grace.extend;当您要将新方法添加到grace()创建的实例时,请使用grace.fn.extend。看下面的代码:

(function(window, undefined) {
   "use strict";

    var grace = function(options) {
        return new grace.fn.init(options);
    };

    grace.fn = grace.prototype = {
        init: function() {
            alert("grace() OK");
        },
    };

    grace.extend = grace.fn.extend = function() {/* code here */}

    grace.extend({ // add new methods to grace itself
        set: function() {
            alert("grace.set() OK");
        }
    })

    grace.fn.extend({
       /* add new methods to instances that grace() creates */
    })

    grace.fn.init.prototype = grance.fn;
    window.grace = grace;

})(window);


注意:需要grace.fn.init.prototype = grance.fn,因为new grace.fn.init(options)将使对象继承grace.init.prototype的方法。没有那行代码,您将不会获得这些grace.fn方法。

对不起,我的英语不好,也很抱歉没有可运行的代码。希望上面的代码会启发您。

09-18 02:24