Básicamente en el primer ejemplo declaras object literal que en realidad ya es una instancia de objeto.
En su segundo ejemplo, define una función de constructor que se puede usar con el operador new
para crear instancias de objetos.
Los literales de objetos también se pueden usar para crear nuevas instancias de objetos y hacer herencia de prototipos, Douglas Crockford también promueve esta técnica.
Básicamente, usted puede tener un operador object
:
function object(o) {
function F() {}
F.prototype = o;
return new F();
}
Esta función auxiliar se puede utilizar de una manera muy intuitiva y conveniente.
Básicamente recibir un objeto como parámetro, dentro de la función se crea una instancia de nuevo objeto, el antiguo objeto es encadenados al prototipo del nuevo objeto, y su regreso.
Puede ser utilizado como esto:
var oldObject = {
firstMethod: function() { alert('first'); },
secondMethod: function() { alert('second'); },
};
var newObject = object(oldObject);
newObject.thirdMethod = function() { alert('third'); };
var otherObject = object(newObject);
otherObject.firstMethod();
Usted puede ir más lejos como quiera, haciendo nuevas instancias de los objetos previamente definidos.
Recomendado:
Esto también es una buena pregunta para mí, gracias por publicar. –
En lo que respecta a su pregunta en la edición, depende de lo que desea hacer. Si solo tiene una copia del objeto, busque la primera sintaxis. Si desea crear copias múltiples (como si 'Something' fuera una 'Clase' en otros idiomas), busque la segunda sintaxis (o en realidad, una versión editada en la que defina 'sayHi' dentro del constructor usando' this.sayHi = function() {...} ', esta es la norma). –