首先要知道面向对象类class 是ES6之后新增的 在这之前是通过构造函数和原型来模拟类的实现机制,在这里先把类、造函数和原型做好大体了解。
面向过程(POP process-oriented-program):就是按照我们分析好了的步骤,按照步骤解决问题。
面向对象(OOP object-oriented programming): 把事务分解成为一个个对象,然后由对象之间分工合作,是以对象功能来划分问题,而不是步骤。
面向对象的三大特性:
封装性:封装好了之后随处使用,无需知道如何运作,使用就行
继承性:继承了父类的方法 不需要再单独写重复代码
在JS中,
对象是一组无序的相关属性和方法的集合
所有的事务都是对象,例如字符串、数值、数组、函数等。
对象是由【属性】和【方法】组成的
属性指的是特征 比如手机是对象 它的特征有颜色 大小 常用名词表示
方法指的是行为 比如可以打电话 可以发短信 常用动词表示
【类】class 是抽象了对象的公共部分,它泛指某一大类(class)
【对象】特指某一个,是通过实例化具体的一个对象
比如:手机是类 苹果手机 华为手机这就是对象 可以暂且先这么理解着 在这里
类class是包含着具体对象的
语法:class name {
// classbody
}
创建实例:
var xx = new name();
类要实例化对象 必须使用new关键字
constructor 类的构造函数 【用于传递参数,返回实例对象】,通过new命令生成对象实例时,[自动调用]该方法。如果没有显示定义,类内部会自动给我们创建一个constructor ()
每创建了一个new对象, 会自动调用类class里面的 constructor 方法,
在constructor 方法中如果有参数会接受参数 同时会把会有个this指向new出来的实例对象 并把实例返回出来
添加共有方法:
在class类下 和constructor (){} 同级别 添加方法 funcName(){} 注意不需要写function
注意添加方法时和同级别的方法不需要加逗号“,”分隔
最后可以在实例化对象里面 使用
【实例化对象名.funcName();】来调用共有方法
【类】的继承 extends 继承父类的属性和方法
这里要和super做好区分 我刚开始接触的时候会和super混淆
super是调用父类的constructor ()
否则给子类传递参数的时候是传递给子类自己的constructor ()里面的 但是实际我们是想要用父类的constructor () 这个时候只需要在子类的构造函数中使用super();
而【类】之间的继承是extends
class Son extends Father{
constructor (){
super(); //调用了父类的构造函数 要注意的是要先调用super() 之后再在super() 后面调用子类构造方法
// 简单说就是super() 要放在第一位
}
}
var son1 = new Son();
son1.money();
继承中,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行子类的, 如果子类里面没有 再去父类里面去找,如果有就执行父类的这个方法 这也叫就近原则。
如果子类也有 父类也有 子类就要调用父类方法 可以使用super关键字
在子类中 super.parentfuncName()
类里面的共有属性和方法一定要加this使用
另外如果有很多地方要使用constructor 可以外面先定义一个全局变量 var that;
然后在constructor 中将this赋成that
that= this;
这样外面很多地方就可以使用了
constructor 里面的this指的是创建的实例对象