article này định nghĩa instanceof như sau:javascript: Vẫn còn lúng túng bởi các nhà điều hành instanceof
kiểm tra hànhCác instanceof dù một đối tượng có trong chuỗi nguyên mẫu nó thuộc tính prototype của một nhà xây dựng.
Đó là một lời giải thích hợp lý và cuộc sống là tốt cho đến khi tôi đi qua mã này từ cuốn sách hùng biện Javascript:
function TextCell(text) {
this.text = text.split("\n");
}
TextCell.prototype.minWidth = function() {
return this.text.reduce(function(width, line) {
return Math.max(width, line.length);
}, 0);
}
TextCell.prototype.minHeight = function() {
return this.text.length;
}
TextCell.prototype.draw = function(width, height) {
var result = [];
for (var i = 0; i < height; i++) {
var line = this.text[i] || "";
result.push(line + repeat(" ", width - line.length));
}
return result;
}
function RTextCell(text) {
TextCell.call(this, text);
}
RTextCell.prototype = Object.create(TextCell.prototype);
RTextCell.prototype.draw = function(width, height) {
var result = [];
for (var i = 0; i < height; i++) {
var line = this.text[i] || "";
result.push(repeat(" ", width - line.length) + line);
}
return result;
};
Hãy tạo một thể hiện của RTextCell và thực hiện dưới c
var rt = new RTextCell("ABC");
console.log(rt instanceof RTextCell); // true
console.log(rt instanceof TextCell); // true
Tôi hiểu tại sao đầu ra của console.log thứ 2 là "true" - bởi vì constructor TextCell là một phần của chuỗi nguyên mẫu.
Tuy nhiên console console đầu tiên gây nhầm lẫn cho tôi.
Nếu bạn nhìn vào mã (dòng thứ 10 từ dưới), nguyên mẫu của RTextCell được cập nhật lên một đối tượng mới, có nguyên mẫu được đặt thành TextCell.prototype.
RTextCell.prototype = Object.create(TextCell.prototype);
.
Nhìn vào ảnh chụp nhanh bên dưới, không đề cập đến hàm tạo "RTextCell" trong chuỗi mẫu của đối tượng "rt". Vì vậy, đi theo định nghĩa mà tôi đã đề cập ở đầu bài viết của tôi, không nên đầu ra là sai? Tại sao nó trả về giá trị thực?
Tôi cũng đọc this nhưng không giúp tôi hiểu vấn đề cụ thể này.
Xem bên dưới để biết ảnh chụp nhanh của rt, RTextCell, TextCell theo thứ tự đó.
Đó là câu hỏi có cấu trúc thực sự tốt. Bạn đã cho thấy tất cả các điều tra trước đây của bạn, hy vọng bạn nhận được câu trả lời rất tốt. –
Oh! Tôi nên thêm. Tôi đã kiểm tra cây chuỗi nguyên mẫu này trong các ảnh chụp nhanh ở trên trên cả chrome 43.0.2357.65 và firefox 33.1.1. – Harish