__proto__、prototype与constructor

本文最后更新于:2022年10月12日 上午

__proto__prototypeconstructor

__proto__

__proto__属性在ES标准定义中的名字是[[Prototype]]

  • __proto__constructor属性是对象所独有的
  • prototype属性是函数所独有的
    • 由于JavaScript中函数也是对象,所以函数也拥有__proto__constructor属性

原型链通过__proto__一级一级向上寻找,直到null

prototype

函数的prototype属性指向该函数的原型对象(从一个函数指向一个对象),即当这个函数作为构造函数时所创建的实例的原型对象

作用:让该函数所实例化的对象们可以找到公用的属性和方法

constructor

只有prototype对象自身拥有constructor属性

对象的constructor属性指向该对象的构造函数(从一个对象指向一个函数),“每个对象都有构造函数”(意思是每个对象都可以找到其对应的constructor属性)

Function创建的函数对象较为特殊,该函数对象的constructor属性指向其构造函数Function,此时该函数对象相当于Function的一个实例

1
2
3
4
5
6
function fun() {}
console.log(fun.constructor === fun.__proto__.constructor); //true
console.log(fun.constructor === fun.prototype.constructor); //false
console.log(fun.__proto__ === Function.prototype); //true
console.log(fun.constructor === Function.constructor); //true
console.log(fun.constructor === Function.prototype.constructor); //true

该函数对象的原型对象,即.prototypeconstructor属性指向该函数对象

对一个对象,有

对象.__proto__ === 其构造函数.prototype

其构造函数.prototype.constructor === 其构造函数本身

使用对象字面量 = {} 创建新对象相当于 = new Object(),其对应的construcor属性即指向Object


__proto__、prototype与constructor
https://elcfin.github.io/2021/11/09/prototype与constructor/
作者
Elcfin
发布于
2021年11月9日
许可协议