// Case A
function Constructor() {
this.foo = function() {
...
};
...
}
// vs
// Case B
function Constructor() {
...
};
Constructor.prototype.foo = function() {
...
}
Một trong những lý do chính người tư vấn cho việc sử dụng các nguyên mẫu là .foo
được tạo ra một lần trong trường hợp của các nguyên mẫu nơi như this.foo
được tạo ra nhiều lần khi sử dụng phương pháp khác.Liệu tạo chức năng tiêu thụ bộ nhớ hơn
Tuy nhiên, người ta mong đợi người phiên dịch có thể tối ưu hóa điều này. Vì vậy, chỉ có một bản sao của hàm foo
trong trường hợp A.
Tất nhiên bạn vẫn sẽ có một ngữ cảnh phạm vi duy nhất cho từng đối tượng vì đóng cửa nhưng có ít chi phí hơn thì chức năng mới cho từng đối tượng.
Trình thông dịch JS hiện đại tối ưu hóa trường hợp A sao cho chỉ có một bản sao của hàm foo
?
Chúng tôi có thể có một số tham chiếu xác định "tốt hơn" và "thông dịch viên hiện đại" – Raynos
Bài kiểm tra của bạn phù hợp với những gì tôi tìm thấy trong tôi --- Tôi cũng đã thêm một số khối mã lớn bên trong hàm để kiểm tra xem bộ nhớ bóng nhanh hơn - và nó không ... Mã bên trong hàm không mất thêm bộ nhớ. – gnarf
Ồ - và tôi cũng đã đăng xuất sử dụng bộ nhớ trước và sau khi thử nghiệm để đo độ chênh lệch trước khi đối tượng được tạo ra – gnarf