面向对象

Js是一门弱类型语言php

Java、c、c++、c#、php都是强类型语言c++

在强类型语言中有一个‘类’的概念,是用来实现继承的。编程

强类型语言:三种特性c#

1. 多态性:在强类型语言中,一个变量存在多种形态。在不一样的上下文代码中,变量的形式能够不一样(了解)函数

2. 继承性:在强类型语言中,会存在类的概念,类有父级和子级关系(相似于js中的函数),子级类能够彻底继承父级类中的全部属性prototype

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

父亲原型 实现的继承就很固定。通常不能改变,所以咱们会把一些值不变的属性放在原型中实现继承

通常推荐混合式继承