2012-09-30 5 views
0

J'utilise dojo 1.8 comme bibliothèque javascript. J'essaie de créer une petite classe Vector pour un de mes projets.création de classe avec dojo 1.8 déclarer

J'ai créé un clone de fonction pour cloner l'objet vectoriel. Voici ma classe "td/vecteur"

define([ 
    'dojo/_base/declare', 
    'td/Vector' 
], function(declare, Vector) { 
return declare(null, { 

    x: null, 
    y: null, 

    constructor: function(x, y) { 
     this.x = x; 
     this.y = y; 
    }, 

    clone: function() { 
     return new Vector(this.x, this.y); 
    }, 

    length: function() { 
     return Math.sqrt((this.x * this.x) + (this.y * this.y)); 
    }, 

    normalize: function() { 
     var length = this.length(); 
     this.x = this.x/length; 
     this.y = this.y/length; 
    }, 

    distance: function(target) { 
     return new Vector(target.x - this.x, target.y - this.y); 
    } 
}); 
}); 

Maintenant, mon problème:

La variable "vecteur" est un objet vide.

Alors, comment puis-je faire quelque chose comme ça. Est-ce que quelque chose comme "self" en PHP existe en JavaScript? Quelle est la manière correcte de créer une nouvelle instance de soi dans la classe elle-même?

+0

J'ai aussi essayé "nouvelle auto()" mais l'auto fait référence à l'objet fenêtre – dattn

Répondre

2

La variable Vector est la valeur de retour de td/Vector module, à savoir le fichier td/Vector.js, pas la classe que vous declare ci-dessus, ce qui devrait être la raison pour laquelle il est un objet vide.

Pour référencer la classe elle-même:

define(["dojo/_base/declare"], function(declare) { 

    var Vector = declare(null, {  

     constructor: function(x, y) { 
      this.x = x; 
      this.y = y; 
     }, 

     clone: function() { 
      return new Vector(this.x, this.y); 
     } 
    }); 

    return Vector; 

}); 

Voir en action à jsFiddle: http://jsfiddle.net/phusick/QYBdv/

Questions connexes