Я пытаюсь понять прототип Javascript. Я знаю, что могу добавить функции для прототипа отдельно Calculator.prototype.calculate = function(){};
, однако, когда я попытался установить новый прототип, все развалилось. calc.prototype возвращает undefined. Мой вопрос: почему мы не можем установить новый объект в качестве прототипа? Как добавить методы к прототипу навалом, а не добавлять его по одному?Как установить прототип функции
var calc = new Calculator();
function Calculator(){
this.array = [];
this.results = 0;
}
Calculator.prototype = {
calculate: function(){
try{
results = eval(this.array.join(''));
this.array = [results];
return results;
}
catch(error){
alert('Wrong arguments provided');
return this.array.join('');
}
},
isNumber: function(str){
return !isNaN(parseFloat(str)) && isFinite(str);
},
addToOperationsArray: function(str){
if (this.array.length <= 0 && !this.isNumber(str)){ // Don't add operand before any number.
return;
}
this.array.push(str);
},
clearEverything: function(){
this.array = [];
}
};
Вы не можете установить новый объект в качестве прототипа, потому что существующий прототип - это больше, чем просто пустой объект. Он включает, например, очень необходимую конструкторскую функцию. Вам нужно _extend_ существующий прототип; есть много способов сделать это, одним из которых является использование нового [Object.assign] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) метод – Hamms
Как все развалилось? вы проверили «calc .__ proto__», вы обнаружите, что он есть. Очевидно, вы не использовали бы это - но он должен показать вам, что он на самом деле есть. –
Да, он все еще указывает на Calculator.prototype, который является объектом со свойством конструктора, который имеет прототип, который содержит все эти методы, но бесполезен, потому что я не могу их назвать. Это добавляет больше к путанице, потому что ранее я, хотя цепь прервана, но теперь я вижу, что эти функции находятся в прототипе, который находится где-то в этой черной дыре, которую мы называем javascript. –