Complétion de code – Plugin d'Aptana Eclipse

J'ai fait du développement javascript depuis quelques semaines et j'ai essayé JSDT et Aptana pour aider à l'achèvement du code. JSDT n'était pas très bon, mais j'ai eu plus de chance avec Aptana (utilisé comme plug-in eclipse, pas le produit autonome). Le problème que je rencontre est que lorsque je crée des classes de javascript, je ne peux pas terminer le code. Par exemple, si j'utilise ce qui suit, l'achèvement du code ne fonctionne pas:

var foo = new function(value){ this.myMethod= function(){ } } 

J'ai également vérifié que ce qui suit ne fonctionnera pas:

 function foo(value){ this.myMethod= function(){ } } 

J'ai trouvé que l'utilisation d'un style JSON fonctionne:

 var foo = { myMethod: function(){ } } 

Est-ce que quelqu'un sait pourquoi Aptana fonctionne pour le dernier style, mais pas le premier? L'utilisation du style JSON ne fonctionnera pas pour moi parce que je dois avoir des instances séparées de la classe en question.

De plus, je n'ai pas vraiment réussi à obtenir l'exécution du code à travers les fichiers. Par exemple, si j'ai 3 fichiers dans le répertoire javascript, je ne peux généralement pas obtenir Aptana pour reprendre le marquage du style JSON dans les deux autres classes. Ce DID a travaillé en un point (pour les 2 premières classes que j'ai créées), mais depuis lors, chaque fois que j'ajoute de nouvelles classes, elles ne sont pas récupérées.

Merci beaucoup pour votre aide.

Jeremy


J'ai identifié que les travaux suivants:

 /** * The foo function */ function foo() { } /** * The bar function * @param {Object} a Object a * @param {Object} b Object b */ function bar(a, b){ }; foo.prototype.b = bar; var x = new foo(); xb 

Dans l'exemple ci-dessus, la clé est que vous enregistrez la méthode à l'aide d'un prototype. J'ai également essayé ce qui suit, mais cela n'a pas marché.

 /** * The foo function */ var foo = new function() { } /** * The bar function * @param {Object} a Object a * @param {Object} b Object b */ function bar(a, b){ }; foo.prototype.b = bar; var x = new foo(); xb 

Quelque idée de la différence? Le second est-il une classe valable dans javascript?

J'espère que je peux aider à répondre à toutes vos questions liées au comportement d'achèvement du code d'Aptana. Pour encourager la coopération d'achèvement de code d'Aptana, j'ai utilisé cette approche avec succès:

 var foo = function(){ } foo.prototype.a = "a" foo.prototype.b = function(){ alert(this.a) } 

Vous dites

De plus, je n'ai pas vraiment réussi à obtenir l'exécution du code à travers les fichiers.

Mais j'ai eu de la chance jusqu'à présent. Cependant, j'ai trouvé que si j'ai f = new foo (), mais changez-le pour f = new bar (), l'achèvement du code montre les propriétés de l'objet simple par opposition à foo ou à la barre. Renommer la variable (b = new bar () de f = new foo ()) ou redémarrer l'éditeur semble aider.

Quelque idée de la différence? Le second est-il une classe valable dans javascript?

À propos de "nouvelle fonction ()", selon `new function ()` avec minuscule "f" en JavaScript , quelque chose comme

 var foo = new function(){ ... } 

au lieu de

 var foo = { ... } // JSON style 

ou

 var foo = function(){ ... } 

Fait partie d'une solution de contournement à la mise en œuvre de l'accès privé des propriétés. Gardez à l'esprit tout cela qu'il n'y a pas de «classes» dans JS, mais plutôt des Objets. Tout est un objet.

Est-ce que quelqu'un sait pourquoi Aptana fonctionne pour le dernier style [JSON], mais pas le premier?

La déclaration de style JSON crée en fait l'instance d'un Objet nommé foo, donc Aptana n'a aucun problème à la recherche. L'utilisation d'une fonction permet des instances distinctes, comme vous le mentionnez, mais Aptana semble ne pas suivre les propriétés des choses qui sont déclarées comme des fonctions jusqu'à ce que le prototype soit trouvé. Mon raisonnement est que le prototype déclenche l'achèvement du code d'Aptana car chaque instance de l'objet personnalisé aura toutes les propriétés spécifiées. Sans prototype, les propriétés doivent être redéfinies pour chaque instance (généralement réalisées dans la fonction constructeur, mais notez dans mon bloc de code le plus élevé que mon constructeur est vide car j'utilise un prototype pour définir l'objet personnalisé). Ce lien explique plus sur le prototype dans ce contexte http://www.phpied.com/3-ways-to-define-a-javascript-class/

Quel est votre éditeur JavaScript par défaut dans Aptana (sous Windows> Préférences> Associations de fichiers> * .js)? J'utilise l'éditeur Aptana JS et non l'éditeur JavaScript (par défaut par installation). Notez que ces paramètres peuvent être différents par projet.