Tôi đang cố gắng tối đa hóa việc sử dụng lại một số mã. Mở tùy chỉnh của tôi đối tượng javascript (Tôi sẽ sử dụng PhoneNumber làm ví dụ vì lợi ích của sự đơn giản), tôi đang thiết lập một chức năng nguyên mẫu như thế này:Đối tượng tùy chỉnh Javascript là Generic
var Map = {
write: function() {
alert('My object is ' +this);
}
};
function PhoneNumber(number) {
this.number = number;
}
PhoneNumber.prototype = Map;
//I can call the write function like so
var phoneObject = new PhoneNumber('1234567894');
phoneObject.write(); //ALERT My Object is Object{number:'1234567894'}
Tất cả mọi thứ hoạt động tốt, ngoại trừ một thực tế rằng đối với một số lý do nó quay đối tượng Số điện thoại của tôi thành một đối tượng chung thay vì giữ hàm tạo PhoneNumber của nó. Nếu tôi thực sự đặt chức năng ghi bên trong các nguyên mẫu đối tượng như thế này, nó hoạt động hoàn hảo.
function PhoneNumber(number) {
this.number = number;
}
PhoneNumber.prototype.write = function() {
alert('My object is ' +this);
}
var phoneObject = new PhoneNumber('1234567894');
phoneObject.write(); //ALERT My object is PhoneNumber{number:'1234567894'}
Nhưng tôi thực sự không phải làm theo cách này vì nhiều đối tượng sử dụng chức năng ghi và tất cả đều thực hiện theo cùng một cách chính xác. Làm thế nào tôi có thể tránh các đối tượng của tôi chuyển đổi mình thành các nhà xây dựng chung? Rõ ràng tôi đang thiết lập đối tượng Map trên nguyên mẫu một cách sai, nhưng nó khá quan trọng là tôi không phải sao chép mã trực tiếp từ Map vào hàm nguyên mẫu đối tượng. Bất kỳ ý tưởng?
Điều này chứng tỏ tại sao toàn bộ 'new'/'.constructor' /' điều .prototype' là một mớ hỗn độn lớn và một đường cú pháp thực sự bị rò rỉ cho cơ chế nguyên mẫu thừa kế tao nhã bên dưới, và 'Object.create' là con đường thực sự. QED :) – Kos