次のコードは、コンストラクタでオブジェクトを作成するときに機能しますが、object.Createを実行すると正しく初期化されません。 functionName is not a function
。私には2つの質問があります。 object.createが動作しないのはなぜですか?Object.create vs new
同じCalculator関数内でコードを整理すると、newとobject.createの両方を使用できますか?
私はCalculator.prototypeにメソッドを追加してObject.createを行うことができますが、私のコードを両方のために現在の構造内で変更できるかどうか疑問に思っていましたか?
//var calc = new Calculator();
var calc = Object.create(Calculator);
function Calculator(){
this.array = [];
this.results = 0;
this.calculate = function(){
try{
results = eval(this.array.join(''));
this.array = [results];
return results;
}
catch(error){
alert('Wrong arguments provided');
return this.array.join('');
}
},
this.isNumber = function(str){
return !isNaN(parseFloat(str)) && isFinite(str);
},
this.addToOperationsArray = function(str){
if (this.array.length <= 0 && !this.isNumber(str)){ // Don't add operand before any number.
return;
}
this.array.push(str);
},
this.clearEverything = function(){
this.array = [];
}
}
'Object.create'は、オブジェクトであるプロトタイプを必要とします。 'Calculator'はコンストラクタだけでなく、関数オブジェクトです。したがって、呼び出されない関数オブジェクトを 'Object.create'に渡すだけです。 – ftor
@ LUH3417くそー!私はObject.create内の関数を呼び出すだけで、動作します。 –
「Calculator」は何も返さないので、うまくいきません。呼び出しを表示してください。 – ftor