Tôi đang cố gắng sử dụng thừa kế trong JavaScript tại đây và tôi thấy vấn đề có giá trị mảng trong các lớp Parent được thừa hưởng bởi lớp Child. Dưới đây đang thừa kế bình thường:Thừa kế Javascript: Biến mảng của cha mẹ giữ lại giá trị
var Parent = function() {
this.list = [];
};
var Child = function() {};
Child.prototype = new Parent;
Child.prototype.constructor = Child;
var obj1 = new Child;
obj1.list.push("hello");
console.log(obj1.list); // prints ["hello"];
Khi tôi khởi tạo mới Child đối tượng (được thừa hưởng Chánh, trong đó có biến mảng tên danh sách) để obj1 và cố gắng đẩy obj1.list với một giá trị " hello ", obj1.list in [" hello "] .. cho đến nay rất tốt.
vấn đề này được đưa ra khi tôi đã làm ví dụ trên và tôi đã cố gắng để khởi tạo mới đối tượng Child để obj2 sau đó đẩy obj2 's danh sách với một giá trị 'tạm biệt', và obj2.list bây giờ in ["hello", "tạm biệt"]. (Xem mã dưới đây :)
var obj2 = new Child;
obj2.list.push("goodbye");
console.log(obj2.list); // prints ["hello", "goodbye"];
tôi có thể có một quan niệm sai lầm ở đây, nhưng danh sách mảng trong Chánh được bằng cách nào đó giữ lại giá trị và tôi không biết tại sao.
Đây là một rắc rối lớn vì nếu tôi tái sử dụng các Chánh lớp với nhiều lớp trẻ khác như trường hợp trên, nếu Chánh có biến mảng chia sẻ đến các lớp học con của nó, giá trị sẽ được chia sẻ cho đứa trẻ khác các lớp học cũng là điều bất ngờ đối với tôi.
gì tôi mong đợi là, lớp trẻ em đại diện cho đối tượng mới, cùng đi vào Chánh lớp khi Child lớp được khởi tạo để obj1, mà sau đó khi tôi khởi tạo mới Child đối tượng để obj2, giá trị được đẩy từ obj1 không được chia sẻ với obj2.
- Câu hỏi -
bất cứ ai có thể giúp tôi tìm hiểu lý do tại sao danh sách (biến mảng của Chánh) trong ví dụ trên vẫn giữ được các giá trị/chia sẻ các giá trị được khởi xướng bởi Quỹ Trẻ em đối tượng (trong trường hợp trên, obj1 và obj2)?
Nếu bạn có một giải pháp khác có thể giải quyết vấn đề này, nó sẽ rất tốt đẹp cho bạn, nhưng tôi sẽ rất vui khi tìm ra vấn đề ở trên trước.
Vì cả hai trường hợp đều tham chiếu cùng một ví dụ 'Parent' làm nguyên mẫu của chúng và do đó có cùng mảng. Đã có nhiều câu hỏi về JavaScript OOP ở đây, bạn nên xem chúng. –
có thể trùng lặp của [Oes Undesrtanding OOP: các phiên bản sửa đổi các phiên bản khác] (http://stackoverflow.com/questions/4541788/undesrtanding-javascripts-oop-instances-modifying-other-instances) và [Thuộc tính mẫu thử nghiệm JavaScript không hoạt động như mong đợi với mảng và trường đối tượng] (http://stackoverflow.com/questions/8230085/javascript-prototype-property-not-working-as-expected-with-array-and-object-fiel) –