comprensión del prototipo en javascript [duplicado]

Posible duplicado:
¿Cómo funciona JavaScript .prototype?

Viniendo de los antecedentes de Java, estoy tratando de entender javascript.

Por favor, hágamelo saber si estos son correctos.

  1. Como en Java, hay un Objeto supremo, del cual heredan todos los demás objetos.
  2. La propiedad prototipo es como un puntero que apunta al objeto principal (clases en Java)
  3. Para el objeto "Objeto", el prototipo es nulo.
  4. Los valores de la propiedad del prototipo son cadenas que indican la nomenclatura de los objetos y no son punteros como en C. El concepto de puntero se implementa utilizando el atributo oculto, [[PROTOTYPE]], al que no se puede acceder en el script.

Estoy usando node.js en lugar del navegador para aprender JS. Lo intenté,

var human = Object.create(null);  // same as var human;
console.log(Object.getPrototypeOf(human)); //null

var man  = Object.create(human);
console.log(Object.getPrototypeOf(man));
//{}
//expected 'human'

var person = Object.create(Object.prototype); // same as var person = {}
console.log(Object.getPrototypeOf(person));
//{}
//expected 'object'

preguntado el 27 de julio de 12 a las 18:07

3 Respuestas

  1. Sí, con la excepción de Object.create(null) que no hereda de nada.
  2. No estoy seguro de qué es el "objeto principal", pero el prototipo de una función consta de funciones a las que se puede acceder mediante instancias. Porque Object.prototype.toString existe, también {}.toString - es heredado.
  3. Sí, la cadena de prototipos termina aquí.
  4. NO, .prototype (o el valor devuelto por Object.getPrototypeOf) es un objeto que puede ampliar con propiedades, de modo que esas propiedades sean heredadas por instancias.

Tus ejemplos:

var human = Object.create(null);  // same as var human;

No, crea un objeto vacío que no hereda de nada. var human; conjuntos human a undefined - que no es un objeto sino un valor primitivo (no todo es un objeto en JavaScript).

var man  = Object.create(human);
console.log(Object.getPrototypeOf(man));
//{}
//expected 'human'

Object.getPrototypeOf(man) devuelve el objeto human. Este es un objeto vacío; nodo lo muestra como {}. Es no una cuerda. De hecho, los objetos se pueden asignar a múltiples variables. Un objeto no tiene una variable vinculada a él, por lo que, por diseño, no es posible obtener una cadena. Para verificar la igualdad, podrías hacer Object.getPrototypeOf(man) === human cuyos rendimientos true.

var person = Object.create(Object.prototype); // same as var person = {}
console.log(Object.getPrototypeOf(person));
//{}
//expected 'object'

Esto es de hecho lo mismo que {} - un objeto vacío que hereda directamente de Object. Como se dijo anteriormente, el prototipo es Object.prototype y no una cadena. Parece vacío, pero eso es porque Object.prototypeLas funciones de están disponibles por defecto y ocultas.

Respondido 27 Jul 12, 19:07

En primer lugar, debe leer acerca de la create método antes de intentar usarlo.

En segundo lugar, invoque objetos de la siguiente manera:

var human = {}, man = {}, person = {};

Tercero, esto no es Java. En Java, las clases y la comprensión de las clases son bastante importantes. Los prototipos son completamente opcionales en JavaScript. El único beneficio de rendimiento que ofrecen los prototipos se produce cuando el código hace una gran reutilización de funciones por referencia en diferentes ámbitos. Si este estilo de codificación no se aplica a usted, es probable que no necesite usar prototipos.

Los prototipos se heredan del objeto principal o de algún antepasado. Un analizador de JavaScript primero buscará asignaciones locales y, si no existen, examinará el prototipo del objeto actual para detectar la presencia de la referencia nombrada. En pocas palabras, esto es todo lo que necesita saber en este punto inicial para escribir JavaScript.

Respondido 27 Jul 12, 19:07

En primer lugar, en mi opinión, no empieces con node. Node lo arrastrará a un grupo de arenas movedizas si aún no sabe javascript. En segundo lugar, cuando comencé con el código basado en funciones, luego OO y solo luego pasé a los prototipos. Pero si realmente quieres saber, esta pregunta ya ha sido respondida aquí. ¡No dudes en preguntarme si tienes más preguntas!

contestado el 23 de mayo de 17 a las 12:05

si no es un nodo, ¿qué sugieres que use? - John

Solo usa js normal. Node está diseñado principalmente para javascript del lado del servidor, algo que es un estadio de béisbol completamente diferente. Ver w3schools para tutoriales - Kpower

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.