面向对象
Js是一门弱类型语言
Java、c、c++、c#、php都是强类型语言
在强类型语言中有一个‘类’的概念,是用来实现继承的。
强类型语言:三种特性
1. 多态性:在强类型语言中,一个变量存在多种形态。在不同的上下文代码中,变量的形式可以不同(了解)
2. 继承性:在强类型语言中,会存在类的概念,类有父级和子级关系(类似于js中的函数),子级类可以完全继承父级类中的所有属性
(1) 继承就是完完全全拥有
3. 封装:封装函数
Js在诞生初期没有继承 因为js中没有类
后来人们就创建出了面向对象编程
1. js中的继承
(1) 原型
① 原型是基于对象出现的
② 定义:原型就是某一个对象中__proto__非标准属性指向的一个对象
③ __proto__非标准属性 是每一个对象中的默认属性,不需要手动编写,自动就会有这个属性,这个属性的属性值就是这个对象的原型
④ 原型:其实也是一个对象,也会有各种属性,这些属性,会完全继承给原型的对象
⑤ 对象.__proto__就是当前对象的原型
(2) 对象的声明方式
① new关键字声明
② 字面量声明
③ 由以上两种方法可知
1) Js中声明对象可以直接声明,也可以通过构造函数来声明
2) 这里,我们主要探讨一下通过构造函数声明对象
(3) 构造函数
① 构造函数可以实例化对象,这个实例化的对象有原型
② 实例化的对象原型也是 对象名.__proto__
③ 对象名.__proto__(原型)和构造函数之间的关系:
1) 原型中会有一个属性constructor,这个属性的属性值就是对象的构造函数
a. 原型.constructor===构造函数
b. 构造函数.prototype===原型
构造函数和工厂函数
构造函数中最后会隐式返回绑定好属性的空对象,如果用户没有写返回值或者返回值是值类型数据,那么,构造函数就会隐式返回。
如果用户写了返回值为引用类型,构造函数就不会隐式返回,而是返回用户写入的返回值
对象的创建方法
1. 直接创建对象
(1) 优点:简单,明了
(2) 缺点:当需要创建大量对象的时候,会造成大量的工作量=-=
2. 构造函数创建对象
(1) 优点:可以很方便的创建大量对象
(2) 缺点:一旦忘记写new就会造成全局变量的污染
3. 工厂函数创建对象
(1) 优点:可以大量创建对象,并且既可以写new,也可以不写new
(2) 缺点:做法比较复杂
现在我们创建对象一般使用构造函数,因为构造函数创建出来的对象类型是最强的
继承的方式
1. 构造函数继承
2. 原型继承
3. 混合式继承: 混合式继承 父亲和母亲一起给孩子实现继承 。母亲构造函数实现的继承很灵活,属性的值可以根据用户传递的实参随时改变,因此,一般把一些值可能互不相同的属性写在构造函数中实现继承。
父亲原型 实现的继承就很固定。一般不能改变,因此我们会把一些值不变的属性放在原型中实现继承
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。