La relación entre el objeto integrado Function Object y {} object en js y el uso del constructor prototipo instanceof

En  JavaScript  , cada función tiene un prototipo. Después de que se crea una instancia de la función, el objeto de instancia puede acceder al prototipo a través de la propiedad prototype para implementar el mecanismo de herencia.

Definir el prototipo

Cuando se trata de herencia, JavaScript solo tiene una estructura: objetos. Cada instancia de un objeto (objeto) tiene una propiedad privada (llamada __proto__) que apunta a su constructor de objeto prototipo ( el prototipo  ). El objeto prototipo también tiene su propio objeto prototipo (__proto__), capa por capa hasta que el objeto prototipo de un objeto es  null. Por definición, null no existe un prototipo y sirve como el último eslabón de esta cadena de prototipos .

El prototipo es en realidad un objeto ordinario, heredado de la clase Object, que se crea automáticamente mediante  Java Script y se adjunta a cada función. La posición y la relación del prototipo en el sistema de objetos JavaScript se muestran en la figura.

Objeto y Función son dos tipos diferentes de constructores, y se pueden crear diferentes tipos de objetos de instancia utilizando el operador new. La relación entre los objetos de instancia, las clases, el objeto y la función se muestra en la figura.
 

 

 

内置对象 Object   构造函数创建一个对象包装器。
new Object() // {}
内置对象 Function 构造函数创建一个新的 Function 对象。 
new Function() 
//ƒ anonymous() {}


Function              // ƒ Function() { [native code] }
Function.prototype    // ƒ () { [native code] }
Function.constructor  // ƒ Function() { [native code] }
Function.__proto__    // ƒ () { [native code] }



Object             // ƒ Object() { [native code] }
Object.prototype   // {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, 
                   //  hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}
Object.constructor // ƒ Function() { [native code] }
Object.__proto__      // ƒ () { [native code] }

({}).constructor  // ƒ Object() { [native code] }
({}).prototype    // undefined
({}).__proto__    //  {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, 
                  //  hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}



可以得出以下结论:
1: Object 的构造器 指向 Function
Object.constructor === Function

2: {} 的构造器 指向 Object
({}).constructor  === Object

3: Function Object 的原型对象的构造器 指向他自身 {}无原型对象
Function.prototype.constructor === Function
Object.prototype.constructor === Object

4: 
Function.prototype === Object.__proto__  // true
Function.prototype === Object.constructor.prototype //true
Function.prototype.__proto__ === Object.prototype  //true



Function.prototype.constructor.prototype === Object.prototype  //false
// instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
// prototype 每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。
// constructor 属性返回对象的构造函数。

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
const auto = new Car('Honda', 'Accord', 1998);


// 输出如下 
auto  // Car {make: "Honda", model: "Accord", year: 1998}

auto.constructor === Car // true
auto instanceof Car  // true ;
auto instanceof Object  // true;
auto instanceof Function  // false;

Consulte también el artículo: prototipo de objeto de instanciación de constructor herencia de cadena de prototipo de objeto   https://blog.csdn.net/lianjiuxiao/article/details/109806396

 

expandir:

Inserte la descripción de la imagen aquí

 

Supongo que te gusta

Origin blog.csdn.net/lianjiuxiao/article/details/113343021
Recomendado
Clasificación