Para descubrir la cadena de prototipos, primero debe descubrir el tipo de función. Una clase tiene una característica muy importante, que es que puede crear objetos con ella como una plantilla basada en su constructor. En JavaScript, la función tiene 2 funciones
Primero, como una llamada de función general
En segundo lugar, el constructor de su objeto prototipo es nuevo ()
Tomemos un ejemplo
La copia del código es la siguiente:
función a () {
this.name = 'a';
}
¿Qué sucede cuando se crea una función?
Primero, creará un objeto de función, es decir, una misma
En segundo lugar, creará un objeto prototipo @a (denotado por @)
Tercero, el objeto de función tendrá un puntero prototipo, que apunta al objeto prototipo correspondiente, y aquí apunta a @a
Cuarto, hay un puntero de constructor en el objeto @A, que apunta a su constructor, aquí señala a un
http://img.blog.csdn.net/20140222125611500?watermark/2/text/ahr0cdovl2jsb2cuy3nkbi5uzxqvbgpsmtu3mdex/font/5a6l5l2t/fontsize/400/fil ity/sureste
¿Cuál es el uso de este atributo prototipo?
De hecho, el atributo prototipo representa el rango que la función actual puede controlar (o indica cuyo constructor es la función actual). .
La copia del código es la siguiente:
función a () {
this.name = 'a';
}
var a1 = nuevo a ();
Esto es similar a otros idiomas comunes.
Luego, modificar las propiedades del prototipo que apunta al objeto afectará todas las instancias creadas con él como una plantilla.
La copia del código es la siguiente:
función a () {
this.name = 'a';
}
var a1 = nuevo a ();
A.Prototype.age = 1;
alerta (a1.age);
Resultados: 1
Entonces, ¿por qué el objeto A1 puede acceder directamente al atributo de edad? No defino el atributo de edad en el objeto A1.
Esto se debe a que habrá una referencia en todos los casos _proto_ (se puede acceder directamente en Firfox, Chrome, pero es decir, no lo admite) apuntando a este prototipo, aquí apunta a @a,
La copia del código es la siguiente:
función a () {
this.name = 'a';
}
var a1 = nuevo a ();
alerta (a1._proto_ == A.Prototype)
Resultado: verdadero
Al acceder a los atributos, primero buscará dentro del objeto A1. Lo encuentre, regresará indefinido.
En este punto, surge el significado de la cadena prototipo. Object.prototype es el prototipo de nivel superior, por lo que si la propiedad Object.prototype se modifica, afectará a todos los objetos.
Mirando un código
La copia del código es la siguiente:
función a () {
this.name = 'a';
}
función b () {
this.age = 1;
}
b.prototype = new a ();
alerta (nuevo B (). Nombre);
Mostramos que B señala el prototipo de B a una instancia de A, y luego la instancia de B también puede acceder a las propiedades de A. Esta es la herencia de JavaScript, entonces, ¿por qué B.prototipo apunta a una instancia de A, en lugar de señalar directamente a A.prototipo?
La copia del código es la siguiente:
B.Prototype = nuevo A.Prototype;
Si modifica las propiedades en P.prototipo como se escribió anteriormente, entonces el prototipo de A también cambiará, que es equivalente a la subclase que modifica la clase principal, y las propiedades de la subclase y la clase principal se combinan, lo que obviamente es inapropiado. En otras palabras, B también se convierte en el constructor de @A, y A y B se convierten en relaciones paralelas.
Podemos definirlo a continuación:
Función A hereda la función B, que es el constructor que hace que la función se convierta en una instancia del prototipo de función b.
La copia del código es la siguiente:
var $ = jQuery = function (selector, context) {
// Es imposible construirse nuevamente en su propio constructor, por lo que se devolvió otra instancia de constructor
devolver nuevo init (selector, contexto);
}
jQuery.fn = jQuery.prototype = {
tamaño: function () {
devolver esto.length;
}
}
function init (selector, context) {
}
init.prototype = jQuery.fn ;;
}
Este es un código fuente de jQuery.
Usando el conocimiento anterior, se puede explicar que jQuery es solo una llamada a una función general, que devuelve un objeto creado por otro constructor del prototipo jQuery, es decir, nuevo init ()