我想了解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 = [];
}
};
您不能将新对象设置为原型,因为现有原型不仅仅是一个空对象。它包括,例如,非常必要的构造函数。你需要扩展现有的原型;有很多方法可以做到这一点,其中之一是使用新的[Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)方法 – Hamms
一切如何分崩离析?你是否检查过“calc .__ proto__”,你会发现它在那里。很明显,你不会使用它 - 但它是在那里告诉你它确实存在。 –
是的,它仍然指向Calculator.prototype,它是一个具有构造函数属性的对象,它具有包含所有这些方法的原型,但由于无法调用它们而无用。它增加了更多的混淆,因为以前我虽然断链,但现在我看到这些函数在原型中,这是我们称之为JavaScript的黑洞中的某个地方。 –