JavaScript - ficando 'indefinido' ao tentar obter o protótipo da Array
-
21-08-2019 - |
Pergunta
Eu acho que é uma fuga de cérebros das 5 da manhã, mas estou tendo problemas para entender isso.
obj = ['a','b'];
alert( obj.prototype ); //returns "undefined"
Por que não é obj.prototype
função de retorno Array(){ }
Como protótipo? Ele faz referência Array
como o construtor.
Solução
Como a instância não possui um protótipo, a classe* possui.
Possivelmente você quer obj.constructor.prototype
ou alternativamente obj.constructor==Array
* para ser mais preciso, o construtor tem o protótipo, mas é claro nas funções js = classes = construtores
Outras dicas
Não tenho certeza se você pode acessar o prototype
objeto de uma instância de um objeto. O seguinte comportamento pode ajudá -lo:
alert(Array); // displays "function Array() { [native code] }"
alert(Array.prototype); // displays ""
alert(['a','b'].constructor); // displays "function Array() { [native code] }"
obj.prototype
não está voltando function Array() { ... }
como esse é o construtor do objeto.
No seu exemplo, obj
é uma instância de um Array
, não a aula Array
em si.
Outra maneira de entender é que, por exemplo, você não pode herdar de um instância de um objeto (ou classe), você só pode herdar do próprio objeto (ou classe), que no seu exemplo significa que você pode herdar do Array
objeto, mas não de uma instância direta do objeto da matriz, como obj
.
De acordo com a especificação da ECMA, o link de protótipo de um objeto não é visível, mas a maioria dos navegadores modernos (Firefox, Safari, Chrome) permitem vê -lo através do __proto__
Propriedade, então tente:
obj = ['a','b'];
alert( obj.__proto__ );
Um objeto também possui a propriedade "Construtor" definida na construção, para que você possa tentar:
obj = ['a','b'];
alert( obj.constructor.prototype );
No entanto, obj.constructor
pode ser alterado após a contução de um objeto, como pode obj.constructor.prototype
, sem alterar o protótipo real do OBJ.
Não é realmente minha xícara de chá, mas essa maneira de defini -la faz de "Obj" uma matriz? Tentou
obj = new Array();
obj[0] = "a";
obj[1] = "b";
?