Javascript - Conseguir 'indefinido' al intentar conseguir el prototipo de array
-
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.
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";