原型链

2023-02-18  本文已影响0人  糖糖不加糖_

https://blog.csdn.net/cc18868876837/article/details/81211729

image.png image.png image.png

__ proto __ 、contructor、prototype

对象独有:__ proto __ 、contructor
函数独有:prototype

由于函数也是对象,所以函数也有__ proto __ 和 contructor,实例对象没有prototype!!!!

__ proto __

由一个对象指向一个对象 即指向他的原型对象(父对象)

XX.__ proto __ === 父对象.prototype
所有函数.prototype的父对象都是Object

作用是如果当前对象内部没有这个属性的话,就会向上查找,一直到找到这个属性,或者查找道null为止(原型链终结就是null了,null之后在往上找就会报错了, 若不算null,那Object就是对象的最高一层)

const Foo = function() {}  // const Foo = new Function()和下面结果相同
const fn = new Foo()
fn.__proto__ === Foo.prototype // true
// 实例往上找原型链,不会经过Function.prototype,因为Foo本身是函数不是实例,Foo.prototype的父对象是Object
Foo.prototype.__proto__ === Object.prototype  // true


Foo.__proto__ === Function.prototype // true
Function.prototype.__proto__ === Object.prototype  // true
Object.prototype.__proto__ === null  // true

contructor

由一个对象指向一个函数 即指向该对象的构造函数

XX.contructor === 父函数
XX.prototype.contructor === XX
函数最后会以Function收尾

每个对象都可以找到对应的构造函数contructor(有可能是自己定义的,也有可能是__ proto __原型链中找到的,若是通过原型链找到的,那么contructor值就是原型链的contructor),所有函数和对象都是由Function的构造函数得来的,所以contructor的终点就是Function(另外Function对象比较特殊,他的contructor就是自己即Function)


image.png
// 普通函数/方法的构造函数,是父函数,ps Function是自己,因为他封顶了
fn.constructor === Foo  // true
Foo.constructor === Function  // true
Object.constructor === Function  // true
Function.constructor === Function  // true

// 函数prototype的构造函数就是函数自己本身
Foo.prototype.constructor === Foo  // true
Object.prototype.constructor === Object  // true

prototype

由一个函数指向一个对象
含义为所有实例的原型对象

上一篇 下一篇

猜你喜欢

热点阅读