Pergunta

Eu tenho feito o desenvolvimento de JavaScript nas últimas duas semanas e tentei JSDT e Aptana para ajudar na conclusão do código. O JSDT não foi muito bom, mas tive mais sorte com o Aptana (usado como plug-in eclipse, não o produto independente). O problema que estou encontrando é que, quando crio classes JavaScript, não consigo obter a conclusão do código para funcionar. Por exemplo, se eu usar o seguinte, a conclusão do código não funcionará:

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

Também verifiquei que o seguinte não funcionará:

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

Eu descobri que usar um estilo JSON funciona:

var foo = {
    myMethod: function(){

    }
}

Alguém sabe por que o Aptana funciona para o último estilo, mas não o primeiro? Usar o estilo JSON não funcionará para mim, porque eu tenho que ter instâncias separadas da classe em questão.

Além disso, não tenho muito sucesso em concluir o código para funcionar em arquivos. Por exemplo, se eu tiver 3 arquivos no diretório JavaScript, geralmente não consigo fazer o Aptana pegar a marcação do estilo JSON nas outras duas classes. Isso funcionou em um ponto (para as duas primeiras classes que eu criei), mas desde então sempre que adiciono novas aulas, elas não são escolhidas.

Muito obrigado por sua assistência.

Jeremy


Eu identifiquei que os seguintes trabalhos:

/**
* 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

No exemplo acima, a chave é que você está registrando o método usando o protótipo. Eu também tentei o seguinte, mas não funcionou.

/**
* 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

Alguma idéia qual é a diferença? A segunda é uma classe válida em JavaScript?

Foi útil?

Solução

Espero poder ajudar a responder a todas as suas perguntas relacionadas ao comportamento de conclusão do código da Aptana. Para incentivar a cooperação de conclusão de código da Aptana, tenho usado essa abordagem com sucesso:

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

Você diz

Além disso, não tenho muito sucesso em concluir o código para funcionar em arquivos.

Mas tive boa sorte até agora. No entanto, descobri que, se eu tiver f = new Foo (), mas altere -o para f = new Bar (), a conclusão do código mostra propriedades do objeto simples e em oposição a foo ou bar. Renomear a variável (b = new bar () de f = new Foo ()) ou reiniciar o editor parece ajudar.

Alguma idéia qual é a diferença? A segunda é uma classe válida em JavaScript?

Sobre "new function ()", de acordo com `new function ()` com minúsculas "f" em javascript , algo como

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

ao invés de

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

ou

var foo = function(){ ... }

faz parte de uma solução alternativa para a implementação do acesso privado de propriedades. Lembre -se de tudo isso de que não há "classes" no JS, mas objetos. Tudo é um objeto.

Alguém sabe por que o Aptana funciona para o último estilo [JSON], mas não o primeiro?

A declaração do estilo JSON realmente cria instância de um objeto chamado Foo, para que Aptana não tenha problemas para procurar. O uso de uma função permite instâncias separadas, como você menciona, mas o Aptana parece não rastrear propriedades de coisas que são declaradas como funções até que o protótipo seja encontrado. Meu raciocínio é que o protótipo aciona a conclusão do código da Aptana, porque todas as instâncias do objeto personalizado terão todas as propriedades especificadas. Sem protótipo, as propriedades devem ser redefinidas para cada instância (geralmente feitas na função do construtor, mas observe no meu bloco mais superior que meu construtor está vazio porque uso o protótipo para definir o objeto personalizado). Este link explica mais sobre o protótipo neste contexto http://www.phpied.com/3-ways-to-define-a-javascript-class/

Outras dicas

Qual é o seu editor JavaScript padrão no apptana (no Windows> Preferências> Associações de Arquivos> *.js)? Eu uso o editor JS Aptana e não o editor JavaScript (padrão por instalação). Observe que essas configurações podem ser diferentes por projeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top