2013-12-19 23 views
2

我想開發一些庫,遵循一些有趣的jQuery模式(基本上是Builder和Prototype)。我試圖閱讀jQuery源代碼並搜索教程,但沒有得到任何地方。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); 

它可以直接調用,但它們的方法不可訪問。

+2

將所有'grace.fn'屬性複製到'grace'中 – zerkms

+0

http://jsfiddle.net/J825H/1/ – zerkms

+0

'window.grace = grace.fn;'http://jsfiddle.net/J825H/ 2 / –

回答

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

對不起,我可憐的英語,並抱歉沒有可運行的代碼。上面的希望代碼會激勵你。