Tôi đang làm việc trên một dự án JavaScript sử dụng Thừa kế nguyên mẫu. Cách tôi quyết định sử dụng nó như sau:Nguyên mẫu Trình tạo cuộc gọi thừa kế hai lần
var MySuperClass = function (param) {
this.prop = param;
};
MySuperClass.prototype.myFunc = function() {
console.log(this.prop);
};
var MySubClass = function (param) {
MySuperClass.call(this, param);
};
MySubClass.prototype = new MySuperClass();
MySubClass.prototype.constructor = MySubClass;
var obj = new MySubClass('value');
obj.myFunc();
Với sự nhấn mạnh vào thừa kế. Vấn đề với điều này là nếu tôi đặt một console.log trong hàm tạo của mỗi lớp (siêu và phụ), lớp siêu được gọi hai lần, một khi nó được chuyển vào lớp con với MySubClass.prototype = new MySuperClass();
mà không cần bất kỳ các tham số và một lần với các tham số khi nó là 'constructor stolen' trong constructor của lớp con.
Điều này có thể gây ra lỗi nếu sau đó tôi cố lưu các thông số đó (nghĩa là tôi phải thêm logic để xử lý các tham số trống).
Bây giờ nếu tôi làm điều này:
var MySubClass = function (param) {
MySuperClass.call(this, param);
};
MySubClass.prototype = MySuperClass;
MySubClass.prototype.constructor = MySubClass;
Tất cả mọi thứ dường như làm việc một cách chính xác nhưng tôi chưa bao giờ thấy bất cứ ai làm điều này trước (trong Googl'ing của tôi).
Bất cứ ai có thể giải thích cho tôi nếu và cách thứ hai không chính xác (có vẻ như tương tự như hàm kế thừa Crockford) và cách sửa lỗi thứ nhất để không kích hoạt hai lần nếu được?
Bản sao có thể có của [Lý do * (không) * để sử dụng từ khóa 'mới' ở đây là gì?] (Http://stackoverflow.com/questions/12592913/what-is-the-reason-to-use -the-new-keyword-here) – Bergi