Para descobrir a cadeia de protótipo, você deve primeiro descobrir o tipo de função. Uma classe tem um recurso muito importante, que é que pode criar objetos com ela como um modelo com base em seu construtor. Em JavaScript, a função tem 2 funções
Primeiro, como uma chamada de função geral
Segundo, o construtor de seu objeto de protótipo é novo ()
Vamos dar um exemplo
A cópia do código é a seguinte:
função a () {
this.name = 'a';
}
O que acontece quando uma função é criada?
Primeiro, ele criará um objeto de função, ou seja, um próprio
Segundo, ele criará um objeto de protótipo @A (indicado por @)
Terceiro, o objeto de função terá um protótipo de ponteiro, que aponta para o objeto de protótipo correspondente, e aqui aponta para @A
Quarto, há um ponteiro construtor no objeto @A, apontando para o seu construtor, aqui aponta para um
http://img.blog.csdn.net/20140222125611500?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGpsMTU3MDEx/font/5a6L5L2T/fontsize/400/fil l/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
Qual é o uso deste atributo de protótipo?
De fato, o atributo protótipo representa o intervalo que a função atual pode controlar (ou indica cujo construtor é a função atual). .
A cópia do código é a seguinte:
função a () {
this.name = 'a';
}
var a1 = novo a ();
Isso é semelhante a outros idiomas comuns.
Em seguida, a modificação das propriedades do protótipo apontando para o objeto afetará todas as instâncias criadas com ele como um modelo.
A cópia do código é a seguinte:
função a () {
this.name = 'a';
}
var a1 = novo a ();
a.prototype.age = 1;
alerta (a1.age);
Resultados: 1
Então, por que o objeto A1 pode acessar diretamente o atributo de idade? Eu não defino o atributo de idade no objeto A1.
Isso porque haverá uma referência em todos os casos _proto_ (pode ser acessada diretamente sob o Firfox, Chrome, mas o IE não o suporta) apontando para este protótipo, aqui aponta para @A,
A cópia do código é a seguinte:
função a () {
this.name = 'a';
}
var a1 = novo a ();
alerta (a1._proto_ == A.Prototype)
Resultado: Verdadeiro
Ao acessar os atributos, você pesquisará primeiro o objeto A1. T Encontre, você retornará indefinido.
Neste ponto, o significado da cadeia de protótipos sai. Object.Prototype é o protótipo de nível superior; portanto, se a propriedade Object.Prototype for modificada, ela afetará todos os objetos.
Olhando para um pedaço de código
A cópia do código é a seguinte:
função a () {
this.name = 'a';
}
função b () {
this.age = 1;
}
b.prototype = novo a ();
alerta (novo b (). nome);
Mostramos que B aponta o protótipo de B para uma instância de A e, em seguida, a instância de B também pode acessar as propriedades de a. Essa é a herança do JavaScript, então por que o b.prototipo aponta para uma instância de A, em vez de apontar diretamente para A.prototype?
A cópia do código é a seguinte:
B.Prototype = novo A.Prototype;
Se você modificar as propriedades no P.Protótipo, conforme escrito acima, o protótipo de A também mudará, o que é equivalente à subclasse modificando a classe pai e as propriedades da subclasse e da classe pai são combinadas, o que é obviamente obviamente inapropriado. Em outras palavras, B também se torna o construtor de @A, e A e B se tornam relacionamentos paralelos.
Podemos defini -lo a seguir:
Função A Função B, que é o construtor que faz da função se tornar uma instância do protótipo da função b.
A cópia do código é a seguinte:
var $ = jQuery = function (seletor, contexto) {
// é impossível construir -se novamente em seu próprio construtor, então outra instância do construtor foi retornada
retornar novo init (seletor, contexto);
}
jQuery.fn = jQuery.prototype = {
Tamanho: function () {
retornar este.length;
}
}
função init (seletor, contexto) {
}
init.prototype = jQuery.fn ;;
}
Este é um código -fonte de jQuery.
Usando o conhecimento acima, pode -se explicar que o jQuery é apenas uma chamada para uma função geral, que retorna um objeto criado por outro construtor do protótipo jQuery, ou seja, novo init ()