Javascript criando objetos - múltiplas abordagens, quaisquer diferenças?
Eu vi algumas maneiras diferentes de instanciar objetos em javascript, queria saber os benefícios / desvantagens das várias abordagens e por que você usaria uma sobre a outra.
Abordagem 1
var obj = {
prop: value,
.
.
.
}
A abordagem um é a abordagem padrão, nada de novo :)
Abordagem 2
var obj = new function() {
var prop1 = value1;
var fn1 = function() {
};
.
.
.
this.prop2 = value2;
.
.
.
}();
A abordagem de função, eu queria comparar essa abordagem com a abordagem 3. A abordagem de função é usada principalmente para encapsulamento (correto?)
Abordagem 3
var obj = (function() {
var prop1 = value1;
var fn1 = function() {
};
.
.
.
return {
prop2: value2,
.
.
.
}
})();
Com essa abordagem, não vejo exatamente o raciocínio por trás de seu uso. Como isso difere da abordagem 2? Ambos podem ser usados para encapsular a lógica.
É para que possamos passar parâmetros, para que possamos lidar com possíveis conflitos? Por exemplo, o jquery$
sintaxe - mas você também pode fazer isso com a abordagem 2 ...
Obrigado.
Editar:
Estou ciente de que a abordagem 1 e 3 são semelhantes (no fato de que ambos retornam objetos), no entanto, a abordagem 3 também cria um fechamento. Qual abordagem 2 também faz.
Essa é a base da minha pergunta, na verdade, tanto 2 quanto 3 criam fechamentos, mas qual é a diferença entre eles.