Diferencia entre Object.create (prototype) y Object (prototype)

Una pregunta rápida pero difícil de search en Google:

var child = Object.create(parent.prototype); var child = Object(parent.prototype); 

¿Son idénticos?


editar:

Mi pregunta fue planteada por estos dos ejemplos de henetworkingar las funciones de prototipo utilizadas para implementar el Patrón de inheritance de combinación parasitaria.

 function inheritPrototype(childObject, parentObject) { var copyOfParent = Object.create(parentObject.prototype); copyOfParent.constructor = childObject; childObject.prototype = copyOfParent; } 

http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/

 function inheritPrototype(subType, superType){ var prototype = object(superType.prototype); prototype.constructor = subType; subType.prototype = prototype; } 

"Herencia Combinada Parasitaria" en JavaScript Profesional para Desarrolladores Web

3 Solutions collect form web for “Diferencia entre Object.create (prototype) y Object (prototype)”

No, no son idénticos, ver abajo:

  1. Object.create(prototype) creará un nuevo prototipo que henetworkinga del prototype pasado como argumento

  2. Object(obj) u new Object(obj) creará una nueva instancia de obj llamando al constructor también.

Ahora que los prototypes también son objects de JavaScript, la diferencia puede ser mínima. Sin embargo, Object.create puede manejar constructores que puedan necesitar arguments, mientras que new Object() no lo hará

Más información en esta respuesta relacionada con SO (por ejemplo, inheritance diferencial, properties personalizadas, etc.)

Referencias

  1. Object.create en MDN
  2. new Object en MDN

ACTUALIZACIÓN después de la edición OP

En mi OOP javascript framework Classy.js hay este polyfill alnetworkingedor de Object.create para browseres más antiguos que podría arrojar luz sobre su pregunta adicional entre las diferencias:

  Create = Obj.create || function( proto, properties ) { var Type = function () {}, TypeObject; Type[PROTO] = proto; TypeObject = new Type( ); TypeObject[__PROTO__] = proto; if ( 'object' === typeOf(properties) ) defineProperties(TypeObject, properties); return TypeObject; } 

Este polyfill puede manejar constructores arbitrarios (con arguments) como Object.create can, y también asegurarse de que __proto__ se asigna correctamente. El patrón que usa Object(prototype) en cuestión es un bash de (débilmente) referencer el prototype .

No, no son lo mismo:

El object (X) o el nuevo object (X) son los mismos que Object.create (X.prototype)

Object(X) creará un object y ejecutará el Constructor (es decir, el object recién creado henetworkinga del prototipo del constructor). Object.create(X.prototype) está creando un object con un Constructor adicional.

El object (X) o el nuevo object (X) no son como Object.create ()

Object.create() crea un object sin ejecutar Constructor (es decir, creará un object que no henetworkinga de nada)

Nuevo object establece que el hijo sea el padre:

 var parent = {name : 'proto'}; var child = new Object(parent); console.log(child === parent);//=true //if I set child.name it will change parent.name 

Object create devuelve una instancia de object que usa el primer argumento ya que es proto (primer prototipo utilizado en la cadena de prototypes).

 child = Object.create(parent); console.log(child === parent);//=false //I can set child.name because it will be shadowed // and will not change parent.name console.log(child.hasOwnProperty('name'));//=false 

Más sobre el prototipo se puede encontrar aquí: https://stackoverflow.com/a/16063711/1641941

  • ¿Cómo puedo llamar a una function Backbone.Model estática de una instancia de ese model, sin especificar el nombre del model?
  • Javascript: cómo inicializar la superclass si el constructor de la class superior toma arguments
  • Por qué JavaScript Namespaces si la inheritance prototípica lo proporciona todo
  • ¿Cómo crear una variable privada accesible para la function Prototipo?
  • Aplicación basada en inheritance prototípica en proyectos de la vida real
  • ¿Cómo se elimina un método de un tipo de javascript?
  • ¿Cómo acceder a prototipo de object en javascript?
  • ¿Cuándo es necesario establecer la propiedad 'prototype.constructor' de una class en Javascript?
  • ¿Cómo puedo anular un método en Javascript y aplicarlo al object original, no a un niño?
  • ¿Qué patrones puedes usar con la inheritance de prototypes que no puedes con la class?
  • ¿Qué es lo opuesto a "prototipo"?
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.