Khi hàm được xác định trong hàm tạo, một thể hiện mới của hàm đó được tạo mỗi khi hàm tạo được gọi. Nó cũng có quyền truy cập vào các biến riêng.
var myClass = function() {
// private variable
var mySecret = Math.random();
// public member
this.name = "Fred";
// privileged function (created each time)
this.sayHello = function() {
return 'Hello my name is ' + this.name;
// function also has access to mySecret variable
};
}
Khi hàm được xác định trên mẫu thử nghiệm, hàm này chỉ được tạo một lần và duy nhất chức năng đó được chia sẻ.
var myClass = function() {
// private variable
var mySecret = Math.random();
// public member
this.name = "Fred";
}
// public function (created once)
myClass.prototype.sayHello = function() {
return 'Hello my name is ' + this.name;
// function has NO access to mySecret variable
};
Vì vậy, việc xác định hàm trên nguyên mẫu sẽ tạo ra ít đối tượng hơn có thể mang lại hiệu suất tốt hơn cho bạn. Mặt khác, các phương thức công khai không có quyền truy cập vào các biến riêng tư. Các ví dụ và lý do khác có sẵn tại đây: http://www.crockford.com/javascript/private.html
@aharon: Chỉ trong trường hợp: hãy thận trọng khi sử dụng ['this'] (http://blog.niftysnippets.org/2008/04/you-must-remember) -this.html). –
Tôi đã cập nhật câu trả lời của mình để tạo sự khác biệt giữa công khai, riêng tư và đặc quyền rõ ràng hơn. – Greg