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.

Foi útil?

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";

?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top