2010-01-24 1 views
1

j'ai donc une JavaScript simple Objet:Puis-je attribuer des opérateurs Objects? "Par exemple +, -"

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){} 

    //... 
} 

Je voudrais effectuer les opérations suivantes:

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

Je sais qu'il est possible de mettre en œuvre opérateurs pour les objets dans d'autres langues, serait génial si je pouvais le faire en Javascript


L'aide serait grandement appréciée. Merci! :)

+0

Le terme que vous recherchez est "surcharge". –

+1

Je vous suggère de faire en sorte que Vector renvoie une valeur avant de pouvoir faire cette opération ... et supprime 'new', donc c'est comme var a = Vector (1,1); – Reigel

+0

merci Reigel! Seriez-vous capable de me montrer un exemple de ce que vous voulez dire s'il vous plaît? :) – RadiantHex

Répondre

3

Ce n'est pas possible en JavaScript.

Vous pouvez spécifier ce qui se passe à votre objet dans des contextes numériques:

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

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

... mais je ne pense pas que ce soit ce que vous êtes après.

Que diriez-vous d'offrir une méthode 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

Merci, c'était utile. J'ai déjà la méthode plus, mais je déteste vraiment ça. :) – RadiantHex

0

Désolé, ECMAScript/Javascript ne supporte pas la surcharge de l'opérateur. Il a été proposé pour ECMAScript 4 mais la proposition n'a pas été acceptée. Vous pouvez toujours définir une méthode qui fait la même chose que +, mais appelez simplement .add() à la place.

Questions connexes