7项重要储备
- Flow 基本语法
- 发布/订阅模式
- ES6+ 语法
- 原型链、闭包
- 函数柯里化
- event loop
接上讲
聊到了ES6的几个重要语法,加下来到第四点继续开始。
4.原型链、闭包
原型链
继承于我们前端来说绝对是非常熟悉也必须熟悉的一个高频必懂知识点。熟悉到只要是面试一定会有关于继承的问题;而且源码中继承的使用也随处可见。
可依旧有很多前端对继承的实现和应用没有一个整体的把握。追其原因无非有二:
- ECMAScript 继承的实现方法区别于其他基于类的实现继承的面向对象(Object Oriented)语言。
- 工作中即使对如何实现继承一知半解,也一点都不耽误写逻辑代码。
无论由于哪一个原因,必须尽快弄懂继承的实现和应用,否则就会流下了没有技术的泪水。
在讲 ECMAScript 继承的概念之前,我先说下类和原型的概念。
类
讲 ECMAScript 继承的概念之前,我先说下类的概念。(如果接触过 Java 或者是 C++ 的话,我们就知道 Java(C++)的继承都是基于类的继承)
扫描二维码关注公众号,回复:
10394318 查看本文章
类: 是面向对象(Object Oriented)语言实现信息封装的基础,称为类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
类: 是描述了一种代码的组织结构形式。
原型
JavaScript 这门语言没有类的概念,所以 JavaScript 并非是基于类的继承,而是基于原型的继承。(主要是借鉴 Self 语言原型(prototype
)继承机制)。
注意:ES6 中的 class 关键字和 OO 语言中的类的概念是不同的。ES6 的 class 其内部同样是基于原型实现的继承。
JavaScript 摒弃类转而使用原型作为实现继承的基础,是因为基于原型的继承相比基于类的继承上在概念上更为简单。
首先我们明确一点,类存在的目的是为了实例化对象,而 JavaScript 可以直接通过对象字面量语法轻松的创建对象。
每一个函数,都有一个
prototype
属性。 所有通过函数
new
出来的对象,这个对象都有一个
__proto__
指向这个函数的
prototype
。 当你想要使用一个对象(或者一个数组)的某个功能时:如果该对象本身具有这个功能,则直接使用;如果该对象本身没有这个功能,则去
__proto__
中找。