Semana passada postei um desafio em javascript para testar o conhecimento teórico dos meus amigos, somente o Coutinho respondeu:

ou mais bonitinho:

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:

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).

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: