JavaScript se basa en las características de muchos idiomas; Por ejemplo, la sintaxis Java, las funciones se basan en el esquema, la herencia prototipo se basa en uno mismo y la expresión regular se basa en Perl. (DC JavaScript: esencia del idioma).
Primero, cada JS es un lenguaje orientado a objetos basado en la herencia prototipo. La matriz interior es un objeto, la función es un objeto y, por supuesto, el "objeto" sigue siendo un objeto. Además, cada objeto tiene una ranura interna [[prototipo]], que es la clave para conectar la cadena prototipo. Es cierto que podemos establecer una propiedad prototipo para un objeto, pero ¿y qué? Esto es solo una manifestación; Hay una intención asesina oculta detrás de él.
Ok, entonces puedo usar isPrototypeOf () para verificar si un objeto es un prototipo de otro objeto; Sin embargo, esto también se basa en la cadena [[prototipo]].
Por ejemplo:
// Crear una función de función foo () {} // Modifique la propiedad prototipo de la función foo.prototype = {name: "foo.prototype"}; // crear una instancia var a = new foo (); // Reescribe el prototipo predeterminado de A, que debería haber sido foo.prototype. A.Prototype = {nombre: "A.Prototype"};La siguiente pregunta es si foo.prototype es el prototipo de A? !
Esto debe verse por separado: por un lado, A.Prototype es de hecho {nombre: "A.Prototype"}; Sin embargo, foo.prototype.IsprototypeOf (a) resultado es verdadero.
Echemos un vistazo a la relación específica: (usar ---> significa una cadena insignificante [[prototipo]], ---- significa una relación prototipo de propiedad)
Función ---> function.prototype ---> object.prototype
Function.prototype <--- foo ---- foo.prototype ------>> objeto.prototype.
Además, [[ProtpType]] de número, booleano, cadena, etc., sigue siendo un objeto de funcionamiento. El objeto Function.Prototype es "función", y no contiene [[construct]] dentro, por lo que no puede usarse como constructor; De hecho, la función.prototype es similar: function () {}. Además de [[prototipo]] ranura interna, el tipo de "función" también tiene un atributo prototipo. Cada función siempre tiene un objeto prototipo: this.prototype = {constructor: this} (un objeto normal). El [[prototipo]] de este objeto normal está conectado al objeto.prototype.
¿El [[prototipo]] del objeto de instancia creado por el constructor un objeto.prototype?
El [[prototipo]] de esta instancia se inicializa mediante la propiedad prototipo del constructor. Tenga en cuenta que no es el [[prototipo]] de la función. Entonces, si es un objeto construido por la función del objeto, entonces lo es.
El objeto es una función, su prototipo es el famoso objeto. Consulte a continuación:
Objeto -----> function.prototype ------> object.prototype.
¿Cómo cambiar esta cadena [[prototipo]]?
Puede ser en forma de var a = object.create (obj) u object.setPrototypeOf (obja, objb). No creo que haya ninguna necesidad de dar ejemplos, porque la relación es muy simple; Solo damos algunos ejemplos de mierda. No tiene sentido.
La última pregunta es, ¿se basa la delegación conductual en la cadena [[prototipo]]?
Sí, ese es el caso.