2012-06-27 27 views
5

Tôi đang cố gắng bọc đầu quanh các mô-đun javascript, nhưng tôi không chắc chắn cách chia mô-đun thành các mô-đun phụ khác. Tôi đã đọc rằng chức năng lồng nhau không thực sự là một ý tưởng tuyệt vời, do hiệu suất, vì vậy làm thế nào để tôi phá vỡ một chức năng trong một mô-đun? Ví dụ: giả sử tôi có mô-đun sau:Mô-đun Javascript mô-đun, hàm lồng nhau và mô-đun phụ

var Editor = {}; 

Editor.build = (function() { 
    var x = 100; 
    return { 
     bigFunction: function() { 
      // This is where I need to define a couple smaller functions 
      // should I create a new module for bigFunction? If so, should it be nested in Editor.build somehow? 
     } 
    }; 
})(); 

bigFunction chỉ liên quan đến Editor.build. Tôi có nên đính kèm các hàm nhỏ hơn tạo nên hàm lớn đối tượng nguyên mẫu bigFunction không? Tôi thậm chí không chắc chắn nếu điều đó có ý nghĩa.

var Editor = {}; 

Editor.build = (function() { 
    var x = 100; 
    return { 
     bigFunction: function() { 
      bigFunction.smallFunction(); 
      bigFunction.prototype.smallFunction = function(){ /*do something */ }; 
      // not sure if this even makes sense 
     } 
    }; 
})(); 

Ai đó có thể vui lòng đưa tôi đi đúng hướng tại đây không? Có rất nhiều thông tin gây hiểu nhầm trực tuyến, và sẽ giống như một hướng dẫn xác định về cách xử lý loại mô đun hóa này.

Cảm ơn bạn.

Trả lời

0

Dưới đây là một đoạn tôi sử dụng để làm tên cho một đầu vào:

var dynamicCounter = 0; 
    //custom dropdown names 
    var createContainerNames = function() { 
     function Names() { 
      this.id = "Tasks_" + dynamicCounter + "__ContainerId"; 
      this.name = "Tasks[" + dynamicCounter + "].ContainerId"; 
      this.parent = "task" + dynamicCounter + "Container"; 
     } 
     Names.prototype = { constructor: Names }; 
     return function() { return new Names(); }; 
    }(); 

Và sau đó tôi sử dụng nó:

var createdNames = createContainerNames(); 
    var createdId = createdNames.id; 
    dynamicCounter++; 
    var differentNames = createContainerNames(); 
    var differentId = differentNames.id; 

cách tiếp cận khác sẽ làm điều này:

var NameModule = function(){ 

//"private" namemodule variables 
var priv1 = "Hello"; 

//"private namemodule methods 
function privMethod1(){ 
    //TODO: implement 
} 

//"public namemodule variables 
var pub1 = "Welcome"; 

//"public" namemodule methods 
function PubMethod(){ 
    //TODO: pub 
} 

return { 
    pub1 : pub1, 
    PubMethod: PubMethod 
}; 

và sau đó sử dụng nó

var myPubMethod = new NameModule(); 
myPubMethod.PubMethod(); 
var pubVar = myPubMethod.pub1; 

EDIT

Bạn cũng có thể áp dụng cách này:

var mod = function(){ 
this.modArray = []; 
}; 

mod.prototype = { 

//private variables 
modId: null, 

//public method 
AddToArray: function (obj) { 
    this.modArray.push(obj); 
} 
} 
+0

Nó không có vẻ đặc biệt hữu ích để giữ các nhà xây dựng và nguyên mẫu của nó trong một đóng cửa, nó có nghĩa là bạn không thể dễ dàng mở rộng hoặc sửa đổi mẫu thử nghiệm sau này. Khó nhìn thấy bất kỳ lợi ích nào đối với các khai báo hàm tiêu chuẩn và gán nguyên mẫu. Mô-đun mô-đun thực sự là về các mô-đun, tức là một trong các đối tượng, không phải là các hàm tạo. – RobG

+0

@RobG - Cái đầu tiên chắc chắn là độc lập hơn. Sự khác biệt giữa hàm đó và hàm chuẩn sẽ là bạn lấy lại các đối tượng duy nhất. Cách tiếp cận thứ hai là nội tuyến hơn với mô hình mô-đun. Tôi có thể đặt một phần ba trong đó sử dụng nguyên mẫu như một cách tiếp cận mở rộng. –

+0

@RobG - Làm cách nào để bạn triển khai mô-đun của mình trong javascript? –

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