Я изучаю наследование в JavaScript с использованием цепочки прототипов.
Вот код: https://jsfiddle.net/pnyf1ska/6/
// INHERITANCE USING JS
// SUPER CLASS CONSTRUCTOR
function bank () {
this.cash = 1000;
}
// SUB CLASS CONSTRUCTOR
function thief () {
// CALL BANK CONSTRUCTOR
bank.call(this);
}
// ADD A METHOD TO BANK.PROTOTYPE
bank.prototype.steal = function () {
console.log('a thief stole '+this.cash+' dollars!');
}
// THIEF EXTENDS BANK AND INHERITS STEAL METHOD.
//thief.prototype = bank.prototype;
// thief.prototype.__proto__ = bank.prototype // also works!
thief.prototype.__proto__.__proto__ = bank.prototype; // why does this break?
let t = new thief();
t.steal(); // OUTPUT 1000.
Здесь thief.prototype.__proto__.__proto__ = bank.prototype
прерывается и выводит ошибку:
"<a class='gotoLine' href='#47:37'>47:37</a> Uncaught TypeError: Immutable prototype object '#<Object>' cannot have their prototype set"
Поскольку thief.prototype.__proto__ = bank.prototype
работает, я думал, что thief.prototype.__proto__.__proto__ = bank.prototype
тоже подойдет.
Вы можете объяснить ошибку и как ее исправить? Спасибо.