Sử dụng nguyên mẫu giúp tạo đối tượng nhanh hơn, vì chức năng đó không phải được tạo lại mỗi lần tạo đối tượng mới.
Khi bạn làm điều này:
function animal(){
this.name = 'rover';
this.set_name = function(name){
this.name = name;
}
}
Chức năng set_name
được tạo ra de novo mỗi và mỗi khi bạn tạo một con vật. Nhưng khi bạn làm điều này
animal.prototype.set_name = function(name){
this.name = name;
}
Chức năng này không phải được tạo lại mỗi lần; nó tồn tại ở một nơi trong nguyên mẫu. Vì vậy, khi bạn gọi someAnimal.set_name("Ubu");
ngữ cảnh this
sẽ được đặt thành someAnimal
và (chỉ một và duy nhất) chức năng set_name
sẽ được gọi.
Có một lợi thế để sử dụng cú pháp đầu tiên mặc dù: chức năng tạo ra theo cách này sẽ có quyền truy cập vào dữ liệu cá nhân:
function animal(){
var privateData = 'foo'
this.name = 'rover';
this.set_name = function(name){
this.name = name;
alert(privateData); //will alert 'foo'
}
}
Douglas Crockford gọi chức năng tạo ra như thế này "đặc quyền" vì lý do đó : họ có quyền truy cập vào cả dữ liệu công khai và riêng tư.
Nguồn
2011-12-08 15:37:32
thành viên được chia sẻ cấp độ thể hiện (không tĩnh) cho một lớp học. ví dụ: Person.prototype.instance_counter = 0; // Không thể truy cập với ClassName như Person.instance_counter (Đây là tĩnh.) –