Javascript - Conseguir 'indefinido' al intentar conseguir el prototipo de array

StackOverflow https://stackoverflow.com/questions/673107

  •  21-08-2019
  •  | 
  •  

Pregunta

Creo que es una fuga de 05 a.m. cerebro, pero estoy teniendo problemas con la comprensión de esto.

obj = ['a','b'];
alert( obj.prototype ); //returns "undefined"

¿Por qué no obj.prototype función que devuelve Array(){ } como el prototipo? Se hace referencia Array como el constructor.

¿Fue útil?

Solución

Debido a que la instancia no tiene un prototipo, la clase * hace.

Es posible que desee obj.constructor.prototype o alternativamente obj.constructor==Array

* Para ser más exactos, la constructor tiene el prototipo, pero por supuesto en funciones JS = = clases constructores

Otros consejos

No estoy seguro de que puede acceder a la prototype objeto a partir de una instancia de un objeto. El siguiente comportamiento podría ayudarle a:

alert(Array); // displays "function Array() { [native code] }"
alert(Array.prototype); // displays ""
alert(['a','b'].constructor); // displays "function Array() { [native code] }"

obj.prototype no devuelve function Array() { ... } ya que es el constructor del objeto.

En su ejemplo, obj es una instancia de un Array, no a la clase <=> sí mismo.

Otra manera de entender es que, por ejemplo, no se puede heredar de un ejemplo de un objeto (o clase), sólo se puede heredar del objeto (o clase) en sí, que en su ejemplo que significa que se puede heredar del <=> objeto, pero no de una instancia directa del objeto array como <=>.

De acuerdo con la especificación ECMA, enlace prototipo de un objeto no es visible, pero la mayoría de los navegadores modernos (Firefox, Safari, Chrome) le permiten ver a través de la que __proto__ propiedad, a fin de tratar:

obj = ['a','b'];
alert( obj.__proto__ );

Un objeto también tiene la propiedad constructor de `' set en construcción, por lo que puede probar:

obj = ['a','b'];
alert( obj.constructor.prototype );

Sin embargo, obj.constructor se puede cambiar después de la contrucción de un objeto, como puede obj.constructor.prototype, sin cambiar el puntero del prototipo real de obj.

No es mi taza de té, pero lo hace de esta manera de definir que hacer "obj" una matriz? Intentado

obj = new Array();
obj[0] = "a";
obj[1] = "b";

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top