jQuery库式模式

时间:2013-12-19 04:07:49

标签: javascript jquery

我想按照一些有趣的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);

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

1 个答案:

答案 0 :(得分:2)

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的这些方法。

抱歉我的英文不好,抱歉没有可运行的代码。上面的希望代码将激励你。

相关问题