tôi đã trả lời một câu hỏi về việc đóng cửa ở đây trong SO với mẫu này:tạo đối tượng từ đóng JS: tôi có nên sử dụng từ khóa "mới" không?
function Constructor() {
var privateProperty = 'private';
var privateMethod = function(){
alert('called from public method');
};
return {
publicProperty: 'im public',
publicMethod: function(){
alert('called from public method');
},
getter: privateMethod
}
}
var myObj = new Constructor();
//public
var pubProp = myObj.publicProperty;
myObj.publicMethod();
myObj.getter();
//private - will cause errors
myObj.privateProperty
myObj.privateMethod
một người dùng nhận xét về câu trả lời của tôi nói:
Ngoài ra, nếu chức năng của bạn trả về một cách rõ ràng một đối tượng nó không phải là một tốt thực hành để gọi nó với mới bởi vì đó là lừa dối - nếu sử dụng mới mà bạn mong đợi kết quả là một thể hiện của Constructor
tôi thường tạo các đối tượng bằng cách sử dụng mới. nhưng tại sao lại là không phải là một thực hành tốt? nó có vẻ như sử dụng mới và không sử dụng lợi nhuận mới cùng một điều. cách thích hợp để tạo các đối tượng từ bao đóng là gì?
như sau: http://jsfiddle.net/DZTC8/1/ cả hai đều trả về cùng một điều, có hoặc không có 'mới' – Joseph
@Joseph: Quan điểm của tôi là nó làm cho' instanceof' hành động kỳ lạ. Đối tượng trả về là * không phải là một cá thể của hàm tạo *, như một người dùng mong đợi, mà đúng hơn là một đối tượng. – Ryan
+1 cho "lạ". cảm ơn! bây giờ tôi có được ý tưởng. – Joseph