Khi tôi chạy mã này:thừa kế JavaScript diệu
function foo() {
console.log("foo");
var self = this;
this.a = function() {
return arguments.length == 0 ? self.b : (self.b = arguments[0]);
};
};
function bar() {
};
bar.prototype = new foo();
var a = new bar();
var b = new bar();
console.log(a.a());
b.a(true);
console.log(a.a());
tôi nhận được kết quả như sau: foo, undefined, true
Những gì tôi không hiểu là như thế nào đối tượng được trả về bởi hàm xây dựng foo
bằng cách nào đó quản lý để phân bổ một vị trí bộ nhớ mới cho b
. Tôi đã hoàn toàn mong đợi sản lượng cuối cùng là true
vì tôi chỉ nhận được 1 đầu ra foo
.
Đó là công trình tuyệt vời, nhưng nó cảm thấy quá nhiều như ma thuật.
Vấn đề của tôi thực sự ở đây là tôi muốn thiết lập thứ tự khởi tạo (hoặc chuỗi). Những gì tôi đã nhận ra là foo
không thể lấy bất kỳ đối số nào, bởi vì nó chỉ được gọi một lần, để cung cấp một cơ sở (hoặc mẫu các loại).
Tôi muốn đưa ra một sơ đồ thực sự đơn giản mà foo
có thông số mà đã được thông qua bar
-foo
(vì bar
thừa hưởng foo
). Tôi tốt với một cái gì đó như gọi foo.apply(this, arguments)
từ bar
nhưng các cuộc gọi để thiết lập các mẫu thử nghiệm đã được thực hiện mà không có đối số, những gì tôi cần là một cách thông thạo để bằng cách nào đó nói với nhau hai.
Nhưng tôi thực sự không muốn để xây dựng toàn bộ một dịch vụ xung quanh tạo các đối tượng cho phép một số loại thừa kế, điều duy nhất tôi thực sự quan tâm là xây dựng các đối tượng, đúng ...
Tôi đã đăng nhập 'foo, undefined, true'. "Không xác định" cuối cùng không hiển thị trong Công cụ dành cho nhà phát triển Chrome nhưng đó chỉ là giá trị trả lại của 'console.log'. Bạn chỉ có 3 nhật ký. – pimvdb
Vâng, đúng vậy, tôi vừa sao chép từ đầu ra từ bảng điều khiển Chrome, bỏ qua ... –
Câu hỏi chính xác là gì? – user123444555621