Resposta 1º desafio
Categories: Ajax, WEB 2.0 -
Semana passada postei um desafio em javascript para testar o conhecimento teórico dos meus amigos, somente o Coutinho respondeu:
var teste = {
teste:function(){
alert(’teste’);
}
};
teste.teste();
ou mais bonitinho:
var teste = {
nome: ‘Coutinho’,
teste:function(){
alert(this.nome);
}
};
teste.teste();
E acertou. Consertou o problema que propositadamente fabriquei e deu uma solução que é a mais simples e portanto a melhor: usar um objeto literal.
Vejamos:
Objetos literais são a definição de objetos na especificação ECMA-262, a especificação do JAVASCRIPT.
"An object is a member of the type Object. It is an unordered collection of properties each of which contains a primitive value, object, or function. A function stored in a property of an object is called a method."
Ela define que um objeto é uma coleção não-ordenada de propriedades onde cada propriedade contém um valor primitivo, um outro objeto ou uma function e uma function armazenada em uma propriedade dessa coleção é denominada de método. Segundo a especificação as propriedades (properties) são campos (Fields) que representam o estado e métodos (methods) que representam o comportamento.
Então a estrutura primordial de um objeto, também chamado de objeto literal é da forma que ele respondeu, que seria assim:
var obj = {
nome: ‘Coutinho’,
teste:function(){
alert(this.nome);
}
};
obj.teste();
Outra forma muito usual pela NEW SCHOOL é instanciar uma function (lembrando que toda Function é um objeto) utilizando o paradigma de construtor com parêntesis após a construção, e utilizar a KEYWORD return para exportar o contexto e isolar o conteúdo interno de códigos maliciosos, já que os métodos apply e call não funcionam nesse tipo de estrutura, criando variáveis privadas (já que só existe o escopo público na ECMAScript).
var obj = function(){
this.nome = ‘Coutinho’;
return {
teste:function(){
alert(nome);
}
};
}();
obj.teste();
Portanto se você tentar usar a estrutura abaixo, vai falhar porque o objeto "obj" não é uma função, já que foi transformado em objeto literal artificialmente:
function B(){
obj.call(this);
};
var teste = new B();
teste.teste();
One Response to “Resposta 1º desafio”
-
d.taveira Says:
October 14th, 2007 at 10:25 amPoxa, Bem legal esse desafio!
Eu gostei e aliás eu até aprendi LoL
=)

