2016-09-25 6 views
0

私はJavaScriptで式パーサーを作成しています。オブジェクトの関数を論理演算子/演算子に割り当てる方法はありますか?演算子がそのオブジェクトで使用されるたびに呼び出されるようにする方法はありますか?オブジェクトの関数に論理演算子を割り当てる方法は?

たとえば、オブジェクトを文字列に連結しようとすると、自動的にオブジェクトの.toString()メソッドが呼び出されます。

たとえば、this.numberという属性のオブジェクトがあるとします。私は、次の操作を実行できるようにしたかった:

function MyObject(number) { 
    this.number = number; 
} 

var obj1 = new MyObject(2); 
var obj2 = new MyObject(3); 

obj1 *= obj2; 
obj2 *= 3; 

obj1.number; // Would return 6. 
obj2.number; // Would return 9. 

この場合、それは、インスタンスのthis.number値を掛けるだろう毎回は、それがMyObjectのインスタンスに値を割り当てるために呼ばれたように、私は*=演算子をオーバーライドしているだろうその右側の値(プリミティブな数値またはその他のインスタンスのthis.numberの値)で指定します。

これを達成する方法はありますか?

何か助けが素晴らしいだろう!

おかげで

+0

をhttp://stackoverflow.com/questions/19620667/javascript-operator-過負荷 – 1000111

答えて

1

:-)あなたは数値を返すように.valueOf()関数を作成することができます。ランタイムは、.toString() —を呼び出すことを決定したときと同じような場合、つまりオブジェクトを数値に強制したいときに呼び出します。

あなたは、しかし、特別な割り当てを治療するためのランタイムを強制することはできませんので、あなたが

obj1 *= obj2; 

仕事をすることはできません。あなたは(.valueOf()実装で)行うことができる最高は次のようになります。

obj1.number = obj1 * obj2; 

.valueOf()のようなものになります。

MyObject.prototype = { 
    valueOf: function() { return this.number; } 
};