Boa tarde!
Qual a diferença entre:
var foo = function (){
}
foo = fucntion (){
}
this.foo = function(){
}
?
Estou com dúvidas na hora de interpretar os erros de códigos de exemplo que encontro na intrent por conta disso.
Boa tarde!
Qual a diferença entre:
var foo = function (){
}
foo = fucntion (){
}
this.foo = function(){
}
?
Estou com dúvidas na hora de interpretar os erros de códigos de exemplo que encontro na intrent por conta disso.
Nos 3 casos você está associando uma variável a uma função.
var foo = function (){
}
Nese caso, a variável foo será uma variável local no escopo da função em que foi criada
foo = fucntion (){
}
Nesse caso foo será uma variável global, sendo acessada de qualquer lugar
this.foo = function(){
}
Nesse caso vai criar a variável no contexto de this e isso depende para onde this está apontando.
Como é sempre muito fácil se enganar onde this aponta, eu geralmente evito usar.
Oi Abel! Muito obrigado pela ajuda. Eu queria aproveitar e te perguntar mais uma coisa.
Eu tenho o seguinte código (é um teste):
[code]PageObjects = function() {
var preencheCaixa = dvr.findElement(by.id('global-search'));
var opcaoBusca = dvr.findElement(by.css('#search > ul > li:nth-child(1) > a'));
this.pesquisar = function(pesquisa) {
//dvr.findElement(by.id('global-search')).sendKeys(pesquisa);
preencheCaixa.sendKeys(pesquisa);
opcaoBusca.click();
};
};[/code]
Por alguma razão, na função pesquisar(pesquisa) a linha preencheCaixa.sendKeys(pesquisa) não funciona.
Essa função, está sendo chamada/executada em outra classe. Para fazer a função funcionar, eu preciso descomentar a linha 08 e comentar as linhas 09 e 10.
Pra verificar onde está o problema você deveria conferir o log do javascript e se tem algum erro acontecendo.
Se o teste está sendo rodado no browser, você geralmente pode conferir no Console.
Repare que as duas opções de código que passou não são equivalmentes.
var preencheCaixa = dvr.findElement(by.id('global-search'));
var opcaoBusca = dvr.findElement(by.css('#search > ul > li:nth-child(1) > a'));
Este trecho é executado quando a função PageObjects é criada e os objetos podem não estar disponíveis nesse momento.
Já no segundo caso:
Esse trecho tenta encontrar o elemento quando a função pesquisar é chamada (e não quando é declarada) e portanto o elemento pode estar disponível esse momento.
Talvez transformando preencheCaixa e opcaoBusca em funções e chamando elas dentro da função pesquisar, você obtenha o comportamento desejado.
Eu debuguei o código (me enrolei um pouco com o debugger do webstorm) e quando a linha preencheCaixa.sendKeys(pesquisa); é executada, ela tem o valor que eu queria armazenado corretamente.
De qualquer forma obrigado pela ajuda, vou continuar tentando batendo cabeça rs.