2010-01-24 4 views
1

Так у меня есть простой Javascript Объект:Могу ли я назначить операторы объектов? "Например, +, -"

function Vector(x, y){ 
    this.x = x; 
    this.y = y; 

    this.magnitude = function(){}; 
    this.add = function(vector){}; 
    this.minus = function(vector){}; 
    this.normalise = function(){}; 
    this.dot = function(vector){} 

    //... 
} 

Я хотел бы выполнить следующие операции:

var a = new Vector(1,1); 
var b = new Vector(10,5); 
var c = a + b 
a += c; 
// ... and so on 

Я знаю, что это возможно реализация операторов для объектов на других языках, было бы здорово, если бы я мог это сделать в Javascript


Помощь была бы очень признательна. Благодаря! :)

+0

Термин, который вы ищете, является «перегрузкой». –

+1

Я предлагаю вам сделать Vector возвратить некоторое значение, прежде чем вы сможете сделать эту операцию ... и удалить «новый», так что это как var a = Vector (1,1); – Reigel

+0

спасибо Рейгель! Вы могли бы показать мне пример того, что вы имеете в виду, пожалуйста? :) – RadiantHex

ответ

3

В JavaScript это невозможно.

Вы можете указать, что происходит с объектом в численных контекстах:

Vector.prototype.valueOf = function() { return 123; }; 

(new Vector(1,1)) + 1; // 124 

... но я не думаю, что это то, что вы после этого.

Как насчет предлагать метод plus? -

Vector.prototype.plus = function(v) { 
    return /* New vector, adding this + v */; 
}; 

var a = new Vector(1,1); 
var b = new Vector(10,5); 
var c = a.plus(b); 
+0

Спасибо, это было полезно. У меня уже есть метод «плюс», но я действительно ненавижу его. :) – RadiantHex

0

Извините, ECMAScript/Javascript не поддерживает перегрузку оператора. Он был предложен для ECMAScript 4, но это предложение не было принято. Вы все же можете определить метод, который делает то же самое, что и +, но - просто позвоните .add().

Смежные вопросы