面向对象
Javascript的面向对象不区分类和示例的概念,而是通过原型(prototype)来实现的
原型是指当我们想要创建 xiaoming 这个具体学生时,我们并没有 Student 类型可用,但是此时正好有这么一个对象:
1 | var robot = { |
robot对象有名字,有身高,很像小明,所以就根据它来创建小明
1 | var robot = { |
创建对象
JavaScript对每个创建的对象都会设置一个原型,指向他的原型对象.当我们用obj.xxx访问一个对象的属性时,JS引擎会现在当前对象上查找该属性,如果没找到就到其原型对象上找,如果还没找到就一直上溯到Object.prototype对象,最后如果还是没有找到,就返回undefined.
构造函数
除了直接使用{…….}创建一个对象外,JavaScript还支持用构造函数来创建对象,用法:
1 | function Student(name){ |
注意:如果不写new,这就是一个普通函数,它返回undefind,但是如果写了new,它就变成了一个构造函数,它绑定的this指向新创建的对象,并默认返回this,也就是说不用在写 return this;
新创建的原型链接是:
xiaoming—> Student.prototype–>object.prototype–>null
原型继承
因为JavaScript根本不存在class这中类型,我们无法直接扩展一个class,需要修改原型链.
例:我们基于Student扩展出PrimaryStudent.
1 | //PrimaryStudent函数 |
优化后
1 |
|
ES6 class继承
如果用新的class关键字来编写Student,可以这样写:
1 | class Student{ |
class继承
1 | class PrimaryStudent extends Student{ |
本笔记根据 廖雪峰老师的JavaScript 教程记录