Question

Je fais le javascript développement pour les deux dernières semaines et ont essayé JSDT et Aptana pour aider à compléter le code. JSDT était pas très bon du tout, 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 javascript classes que je ne peux pas obtenir la complétion de code pour travailler. Par exemple, si j'utilise ce qui suit alors la complétion de code ne fonctionne pas:

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

Je l'ai vérifié que ce qui suit ne fonctionnera pas:

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

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

var foo = {
    myMethod: function(){

    }
}

Quelqu'un sait-il pourquoi Aptana travaille pour le dernier style, mais pas le premier? En utilisant le style JSON ne fonctionnera pas pour moi parce que je dois avoir des instances séparées de la classe en question.

En outre, je ne suis pas très réussi à obtenir la complétion de code pour travailler dans les fichiers. Par exemple, si j'ai 3 fichiers dans le répertoire javascript je peux necessitent pas Aptana pour ramasser le balisage de style JSON dans les deux autres classes. Cela n'a en un point (pour les 2 premières classes I créés), mais depuis lors, chaque fois que j'ajouter de nouvelles classes, ils ne sont pas repris.

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();
x.b

Dans l'exemple ci-dessus est la clé que vous enregistrez la méthode en utilisant un prototype. J'ai aussi essayé ce qui suit, mais il ne fonctionne pas.

/**
* 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();
x.b
Toutes les idées que la différence est

? La deuxième classe valable en javascript?

Était-ce utile?

La solution

Si tout va bien je peux aider à répondre à toutes vos questions liées au comportement d'achèvement du code de Aptana. Encourager la coopération d'achèvement de code de 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

  

En outre, je ne suis pas très réussi à obtenir la complétion de code pour travailler dans les fichiers.

mais j'ai eu la bonne chance jusqu'à présent. Cependant, j'ai trouvé que si j'ai f = new foo (), mais le changement à f = nouveau bar (), la complétion de code présente des propriétés de plaine ol » objet, par opposition soit foo ou bar. Changement de nom de la variable (b = new bar () à partir de f = new foo ()) ou le redémarrage de l'éditeur semble aider.

  Toutes les idées que la différence est

? La deuxième classe valable en javascript?

A propos de "nouvelle fonction ()", selon `nouvelle fonction () `avec minuscules "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 à mettre en œuvre un accès privé des propriétés. Gardez à l'esprit à travers tout cela qu'il n'y a pas de « classes » dans JS, mais plutôt des objets. Tout est un objet.

  

Quelqu'un sait-il pourquoi Aptana travaille pour le dernier style de [JSON], mais pas le premier?

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

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top