2016-09-25 4 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. 

В этом случае, я бы переопределил *= оператора таким образом, чтобы каждый раз он был призван, чтобы присвоить значение экземпляра MyObject было бы умножить this.number значения этого экземпляра по значению справа (значение примитивного числа или значение 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; } 
};