2011-09-24 37 views
8

Tôi muốn viết một thư viện JS và xử lý nó như thế này:Viết một thư viện javascript

var c1 = Module.Class(); 
c1.init(); 
var c1 = Module.Class(); 
c2.init(); 

Và tất nhiên, c1 và c2 không thể chia sẻ các biến tương tự. Tôi nghĩ rằng tôi biết làm thế nào để làm điều này với các đối tượng, nó sẽ là:

var Module = { 

    Class = { 

     init = function(){ 
      ... 
     } 

    } 

} 

Nhưng vấn đề là tôi không thể có nhiều trường hợp của lớp nếu tôi viết theo cách này. Vì vậy, tôi đang cố gắng để đạt được cùng một chức năng, nhưng tôi không nghĩ rằng tôi đang làm đúng.

(function() { 

    var Module; 
    window.Module = Module = {}; 

    function Class(i) { 
     //How can "this" refer to Class instead of Module? 
     this.initial = i; 
    } 

    Class.prototype.execute = function() { 
     ... 
    } 

    //Public 
    Module.Class = Class; 

})(); 

Tôi không có đầu mối nếu có thể, nhưng tôi chấp nhận các đề xuất khác để tạo mô-đun này. Tôi không biết nếu nó có liên quan, nhưng tôi đang sử dụng jQuery bên trong thư viện này.

Trả lời

14

Cách sử dụng:

var c1 = Module.Class("c"); 
var c2 = Module.Class("a"); 
var n = c1.initial(); // equals 'c' 
c1.initial("s"); 
n = c1.initial(); // equals 's' 

Mô-đun Code:

(function(window) { 
    var Module = window.Module = {}; 
    var Class = Module.Class = function(initial) 
    { 
     return new Module.Class.fn.init(initial); 
    }; 
    Class.fn = Class.prototype = { 
     init: function(initial) { 
      this._initial = initial; 
     }, 
     initial: function(v){ 
      if (v !== undefined) { 
       this._initial = v; 
       return this; 
      } 
      return this._initial; 
     } 
    }; 
    Class.fn.init.prototype = Class.fn; 
})(window || this); 

này được sử dụng JavaScript "Module" Thiết kế mẫu; đó là cùng một mẫu thiết kế được sử dụng bởi các thư viện JavaScript như jQuery.

Dưới đây là một hướng dẫn tốt đẹp về mô hình "Module": JavaScript Module Pattern: In-Depth

+1

Perfect! Cảm ơn nhiều! –

+2

bạn được chào đón. –

Các vấn đề liên quan