面向对象

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. 混合式继承: 混合式继承 父亲和母亲一起给孩子实现继承 。母亲构造函数实现的继承很灵活,属性的值可以根据用户传递的实参随时改变,因此,一般把一些值可能互不相同的属性写在构造函数中实现继承。

父亲原型 实现的继承就很固定。一般不能改变,因此我们会把一些值不变的属性放在原型中实现继承

一般推荐混合式继承
10 声望
1 粉丝
0 条评论
10 声望
1 粉丝
宣传栏