JavaScript面向对象
一、面向对象编程
1.面向过程
面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的调用
2.面向对象
面向对象:把事务分解成一个个的对象,然后由对象之间分工与合作,面向对象一对象功能来划分
特点:
- 封装性
- 继承性
- 多态性
二、ES6中的类和对象
1.对象
(1)面向对象的思维特点:
- 抽取对象共用的属性和行为阻止(封装)成一个类
- 对类进行实例化,获取类的对象
(2)对象:一组无序的相关属性和方法的集合,所有事物都是对象,对象由属性(事物的特征)和方法(食物的行为)组成。
(3)创建对象的三种方式:
①对象字面量(语法糖)
var obj1 = {};
②new Object()
var obj2 = new Object();
③自定义构造函数
function Star(uname, age) {
this.uname = uname;
this.age = age;
this.sing = function() {
console.log('唱歌');
}
}
var ldh = new Star('刘德华', 18);
console.log(ldh);
console.log(ldh.sing);
2.类
ES6新增类的概念,使用class关键字声明一个类,通过类来实例化对象,类抽象了对象的公共部分,泛指某一大类
创建类
class 自定义类名{ };
let 自定义对象名 = new 类名();
注意:
①类的名字遵守帕斯卡命名法
②定义类的时候,类名后不加()
③使用类创建对象时,类名后加()
总结:
①类中设置的属性放到constructor构造函数中
②constructor前面不加任何关键字
③创建对象就要用到类
④使用类创建对象时,程序自动调用constructor构造函数
⑤类中的方法放到constructor构造函数外部
⑥类中方法之间不加分隔符
类constructor构造函数
constructor()方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过new命令生成对象实例时,自动调用该方法,若没有显示定义,类内部会自动给我们创建一个constructor()。
使用类添加方法:方法之间不能加逗号分隔,方法不需要添加function关键字
三、类的继承
1.继承
继承:子类可以继承父类的一些属性和方法
<script>
class Father {
constructor(x, y) {
this.x = x;
this.y = y;
}
sum() {
console.log(this.x + this.y);
}
money() {
console.log(100);
}
}
class Son extends Father {
constructor(x, y) {
super(x, y);
}
}
var son = new Son(1, 2);
son.money();
son.sum();
</script>
extends:继承
super关键字:用于访问和调用对象父类的构造函数和普通函数
①属性继承
- 如果子类中没有设置构造函数,则可以直接使用父类中对应的属性,不需要加super关键字
- 如果子类中有构造函数,则必须在子类构造函数this之前通过super()调用父类的构造函数
- super关键字作用:如果在构造函数中使用,则super是用来调用父类构造函数的,如果是在普通方法,super是用来调用父类中的普通方法的
②方法继承
- 如果子类中没有父类中的同名方法,则方法继承的时候,子类直接调用父类的方法
- 如果子类中设置了父类中的同名方法,则子类继承的时候,子类方法执行是按照原型链执行的