JS——面向对象和类的继承

一、POP 和 OOP

(1)面向过程编程 POP (Process-oriented programming)

面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用即可

优点:性能高,适合跟硬件联系很紧密的东西,例如单片机就是面向过程编程

缺点:没有面向对象易维护、易复用、易扩展

(2)面向对象编程 OOP(Object oriented programming)

面向对象:把事物分解成一个个对象,然后由对象之间分工与合作(以对象的功能来划分问题,而不是步骤)

优点:灵活、代码可复用、容易维护和开发、适合多人合作的大型软件项目

缺点:性能比面向过程低

特性:封装性、继承性、多态性

思维特点

1.抽取(抽象)对象共用的属性和行为组织封装成一个类(模板)

2.对类进行实例化,获取类的对象

二、ES6中的类和对象

2.1 对象 

在JS中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等

对象是由属性方法组成的:

属性:事物的特征(名词)

方法:事物的行为(动词)

2.2 类 class

使用class关键字声明一个类,之后以这个类来实例化对象

抽象了对象的公共部分,泛指某一个大类

对象特指某一个,通过实例化一个具体的对象

2.3 创建类

class name {
    // class body
}
var xx = new name()//必须使用new实例化对象

2.4 类 constructor 构造函数

constructor()方法是累的构造函数(默认方法),用于传递参数,返回实例对象,通过new命令生成对象实例时,自动调用该方法,如果没有显示定义,类内部会自动给我们创建一个constructor()

//1.创建类 class 创建一个 Star 类
class Star { constructor(uname) { // 构造函数 可以接受传递过来的参数,同时返回实例对象
this.uname = uname; //这里的 this 指向我们创建的实例对象 }
sing(song){ // 类里面的函数不需要写 function;多个函数之间不需要添加逗号分隔
console.log('我唱歌');
console.log(this.uname + song) }
//2.利用类创建对象 new var ldh = new Star('刘德华') var zxy = new Star('张学友')
ldh.sing('冰雨');
zxy.sing('李香兰');

三、类的继承

3.1 继承 extends

3.2 super() ——调用父类中的构造函数

3.3 super() ——调用父类中的普通函数 

3.4 子类继承父类方法的同时扩展自己的方法

var son = new Son(5,3);
son.subtract();
son.sum();

过程:通过super(x,y) 把 5和3 传递给了父类的构造函数,这样就可以正确调用父类的sum函数,这时候sum函数中的this.x和this.y就可以正确计算

之后通过 this.x=x; this.y=y 分别把5和3 传递给了子类的构造函数,这里的this指向的是子类的对象

注意事项:

1.在 ES6 中没有变量提升,必须先定义类,才能通过类实例化对象

2.类里面的共有属性和方法一定要加this使用

3. constructor里面的this指向实例对象,方法里面的this指向这个方法的调用者,如果是实例对象调用的这个方法,那this就指向实例对象,如果是按钮调用的这个方法,那this就指向这个按钮

var ldh = new Star('刘德华')
console.log(that === ldh); // true
ldh.dance();
console.log(_that === ldh); //true

猜你喜欢

转载自www.cnblogs.com/ccv2/p/12687297.html