JS中的原型链

2019-07-20  本文已影响0人  易推倒DE小狼

最近在面试,几乎每家公司都有被问到原型相关的问题,虽然看过不少文章,但总感觉自己每次回答的时候都没办法把这个知识点讲得清楚,想来还是多借鉴一些文章,然后结合自己的面试经历来整理一下。

首先什么是原型?

JavaScript中除了基本类型外的数据类型,都是对象。但是由于其没有类(class,ES6引入了class,但只是语法糖)的概念,如何将所有对象联系起来就成了一个问题,于是就有了原型和原型链的概念。
简单来说,原型和原型链是JS中解决继承的一种方案。

原型链又是如何实现的?

当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象( object )都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype )。该原型对象也有一个自己的原型对象(__proto__ ) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。

一些跟原型相关的重要的知识点:

总结:

  1. 当 new 一个函数的时候会创建一个对象,『函数.prototype』 等于 『被创建对象.__proto__』
  2. 一切函数都是由 Function 这个函数创建的,所以『Function.prototype === 被创建的函数.__proto__』
  3. 一切函数的原型对象都是由 Object 这个函数创建的,所以『Object.prototype ===
    一切函数.prototype.__proto__』

参考资料:

  1. MDN继承与原型链
  2. 三分钟看完JavaScript原型与原型链
  3. 构造对象,原型和原型链笔记
上一篇 下一篇

猜你喜欢

热点阅读