[置顶] js 原型、原型链、构造器关系

时间:2022-05-24 18:30:21

js 原型、原型链、构造器关系

写在前面

  • 已实例化的对象只有__proto__属性
  • 未实例化的对象有prototype和__proto__属性
  • 构造器是prototype对象的一个属性

上图
[置顶]        js 原型、原型链、构造器关系
测试走起

1.普通函数

function A(x){
this.x=x;
}
console.log(A.prototype.constructor)//function A()
console.log(A.prototype.__proto__===Object.prototype)//true
console.log(A.__proto__===Function.prototype)//true
  • 函数原型(prototype)的构造器(constructor)指向构造函数自身
  • 函数原型的原型链(__proto__)指向Object的原型(prototype)
  • 函数对象的原型链指向Function(所有函数对象的爸爸)的原型
function A(x){
this.x=x;
}
var A1=new A(1);
console.log(A1.__proto__===A.prototype)//true
console.log(A1.__proto__.constructor)//function A()
console.log(A1.constructor)//function A()
  • 函数实例的原型链(__proto__)指向其构造函数的原型(prototype)
  • 函数实例的构造器就是其构造函数

    2.对象函数

console.log(Object.prototype.constructor)//function Object()
console.log(Object.__proto__===Function.prototype)//true
  • 对象函数原型(prototype)的构造器(constructor)指向对象构造函数自身
  • 当然Function也是Object他爸
var obj=new Object();
obj={
a:'a',
b:'b'
}
console.log(obj.__proto__===Object.prototype)//true
console.log(obj.__proto__.constructor)//function Object()
console.log(obj.constructor)//function Object()
  • 对象的原型链(__proto__)指向对象函数的原型(prototype)
  • 对象的构造器(constructor)是对象函数

    3.Function函数

console.log(Function.prototype.constructor)//function Function() 
console.log(Function.__proto__===Function.prototype)//true
console.log(Function.prototype.__proto__===Object.prototype)//true
  • Function的构造器(constructor)指向Function
  • Function的原型链(__proto__)指向Function的原型(prototype)
  • Function原型的原型链(__proto__)指向Object的原型(prototype)

    4.归于虚无

console.log(Object.prototype.__proto__===null)//true
  • Object原型(prototype)的原型链(__proto__)指向null