Javascript 原型链

先来一张图看看几个名词的关系 构造函数、原型、实例面试

徒手实现原型链

原谅个人狂草字体,我手写比用电脑画快。bash

今天咱们只说原型链,因此接下来我就围绕着原型链的几个部分提及。函数

这个你们都很熟悉了,首字母大写的函数咱们均可以做为构造函数,不是说小写的就不能new,也是能够的,暂时说成约定俗成吧!字体

// 构造函数
        function Fn() {}
        //原型对象
        console.log(Fn.prototype)
          //new
        let fn = new Fn() 
        //实例
        console.log(fn)
复制代码

代码部分结束了,今天咱们就用这4行代码描述一下上图也就是原型链的前因后果。ui

每一个函数都有一个属性prototype,借用**Function.prototype** 属性存储了 Function 的原型对象。spa

原型对象

验证了我草图构造函数.prototype指向原型对象prototype

完整的log看一下 翻译

完整log
实例.__proto__也指向原型对象

从log里也能看出来code

constructor指向构造函数
实例原型的constructor指向构造函数

最后再说构造函数 new关键字生成实例cdn

手绘图说完了,咱们说正题 原型链,为何再说原型链以前先画了一个草图,为了帮助预热理解。

每个原型对象都有一个__proto__属性,这个是咱们在代码中继承的关键,也是众多面试官所问的什么是原型链

__proto__

上图能够看到,第一次__proto__找到了原型对象,第二次__proto__找到了Object实例对象,第三次null查找结束。

咱们平时开发中用到了__proto__去查找链条中咱们继承的方法和属性都在prototype(原型)上,因此不能在Fn.prototype = xxx操做,这样链条就会中断,只能在原型上扩展属性。

明天继续聊继承!

欢迎吐槽!

相关文章
相关标签/搜索