"Aのインスタンスa1を指定できるクラスがありたい場合は、値が必要なときにBの特定のインスタンスb1の関数computeValue()を呼び出します。 "。このインスタンスでどのインスタンスのどのメソッドを使用するかを指定する必要があります。 eval()
ソリューションは非常に汚れているようだとfunction.call()
はそう私にとても特定のインスタンスの特定のメソッドをパラメータとして渡す
class A {
constructor(funcToCall, instanceToCallItOn) {
this.funcToCall = funcToCall;
this.instanceToCallItOn = instanceToCallItOn;
}
displayValue() {
console.log(this.funcToCall.call(this.instanceToCallItOn));
}
}
class B {
constructor(value) {
this.value = value;
}
computeValue() {
return this.value;
}
}
var b1 = new B(1);
var a1 = new A(b1.computeValue, b1);
a1.displayValue(); // Displays "1", okay
:
eval()
ソリューション:
class A {
constructor(funcToCall) {
this.funcToCall = funcToCall;
}
displayValue() {
console.log(eval(this.funcToCall));
}
}
class B {
constructor(value) {
this.value = value;
}
computeValue() {
return this.value;
}
}
var b1 = new B(1);
var a1 = new A("b1.computeValue()");
a1.displayValue();// Displays "1", okay
function.call()
ソリューション
は、これまでのところ私は2つの解決策を見つけましたより良い。
どのソリューションが最適ですか?この問題にはよりエレガントな解決策がありますか?
一般的なルールとして、いつでもあなたはevalの 'の間の選択を持っている()'と何か他のもの、別のものを選んでください。 'eval()'はほとんどの場合、最後の手段であるべきです。 – Barmar
'.call()'を単純化するために '.bind()'を使うことができます。 – Barmar