# JS继承系列介绍
看过文章的小伙伴应该都感觉的出,我比较喜欢针对每个知识点出一些比较细节的题目,然后将这些细节连串起来最后组合成大家最爱的综合题😄。
该系列主要为了让我们彻底理解JavaScript面向对象的三大特性:封装、继承、多态。
"咦~这三大特性我知道啊,大清都完了你还在这谈"
啊~ 看到这里你先别着溜,开始的我也是和你一样觉得背背概念,写点小例子就懂了,直到自己给自己出了几道魔鬼题,我才发现之前对它们的理解还是不太全面…因此才有了本系列。
系列总目录:
-
封装
ES6之前的封装-构造函数ES6之后的封装-class
-
继承
- 原型链继承
- 构造继承
- 组合继承
- 寄生组合继承
- 原型式继承
class中的extends继承
-
多态
(在开始写之前本想要一篇文章全部搞定的,但是发现字真太多了,所以才分开来写,而且我终于又可以用我最爱的绯红主题了 😄)
这一章节主要是想向大家介绍一下JS面向对象的第一大特性-封装,也是为了给后面最重要的继承打好基础。
题目也不太多,总共17道,算是牛刀小试吧。
通过阅读本章节你可以学习到:
ES6之前的封装-构造函数ES6之后的封装-class
# 前期准备
先来理解一些最最最基本的概念:
(一)
// 1. 构造函数
function Cat (name) {
this.name
}
// 2. 构造函数原型对象
Cat.prototype
// 3. 使用Cat构造函数创建的实例'乖乖'
var guaiguai = new Cat('guaiguai')
// 4. 构造函数的静态方法,名为fn
Cat.fn = function () {}
// 5. 原型对象上的方法,名为fn
Cat.prototype.fn = function () {}
@前端进阶之旅: 代码已经复制到剪贴板

(二)
语法糖的意思是现有技术本可以实现,但是采用某种写法会更加简洁优雅。
比如class就是语法糖。
(三)
原型链继承的思维导图
(这个暂时看不懂没关系,在继承那一章节中会讲到)

# 封装
把客观事物封装成抽象的类,隐藏属性和方法,仅对外公开接口。
# 1. ES6之前的封装
(虽然以下内容是概念部分,但是对你解题很有帮助哦,请务必仔细阅读它 😁)
都知道ES6的class实际就是一个语法糖,那么在ES6之前,是没有类这个概念的,因此是借助于原型对象和构造函数来实现。
- 私有属性和方法:只能在构造函数内访问不能被外部所访问(在构造函数内使用
var声明的属性) - 公有属性和方法(或实例方法):对象外可以访问到对象内的属性和方法(在构造函数内使用
this设置,或者设置在构造函数原型对象上比如Cat.prototype.xxx) - 静态属性和方法:定义在构造函数上的方法(比如
Cat.xxx),不需要实例就可以调用(例如Object.assign())
# 1.1 题目一
(理解私有属性方法和公有属性方法)
比如我现在想要封装一个生产出猫,名为Cat的构造函数。
- 由于猫的
心和胃都是我们肉眼看不见的,所以我把它们设置为私有属性(隐藏起来) - 并且猫的
心跳我们也是看不到的,所以我把它设置为私有方法(隐藏起来) - 然后猫的
毛色是可以看见的,所以我把它设置为公有属性 - 并且猫
跳起来这个动作我们是看的到的,所以我把它设置为公有方法
function Cat (name, color) {
var heart = '❤️'
var stomach = '胃'
var heartbeat = 