时间:2019/10/25
1.JS面向对象
1).两大编程思想
面向过程(POP):按照步骤解决问题;性能比面向对象高,适合跟硬件联系紧密的东西,如单片机。
面向对象(OOP):以对象的功能划分问题;易维护、易扩展、易复用,可以设计出低耦合的系统;性能比面向过程低。
2).特性:封装、继承、多态
3).思维特点:
1.抽取(抽象)对象共用的属性和行为组织(封装)成一个类(模板);
2.对类进行实例化,获取类的对象。
4).ES6中的类和对象:
对象.jpg
类.jpg
1.类的创建与实例化
// 创建类
class Star {
// constructor函数可以接收传递过来的参数,同时返回实例对象
// 只要new生成实例时,就会自动调用这个函数,不写时自动生成
constructor(uname, age) {
this.uname = uname;
this.age = age;
}
// 共有方法
sing(song) {
console.log(this.uname + song);
}
}
// 利用类创建对象
var xm = new Star('小明', 18);
2.类的继承
class Father {
constructor(x, y) {
this.x = x;
this.y = y;
}
sum() {
console.log(this.x + this.y);
}
}
class Son extends Father{
constructor(x, y) {
// 调用父类的构造函数
// 必须先调用父类的构造方法,再使用子类构造方法
super(x, y);
this.x = x;
this.y = y;
}
}
var son = new Son(1, 2);
son.sum(); // 3
// 继承中采用就近原则:实例化子类调用方法,先从子类中开始查找,若无,则去往父类查找
class Father {
say() {
console.log('我是父类');
}
}
class Son extends Father {
say() {
// 调用父类中的普通函数
console.log(super.say());
}
}
var son = new Son();
son.say(); // 我是父类
3.注意点:
(1).在ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象;
(2).类里面共有的属性和方法一定要加this使用(注意this指向);
(3).类中this指向问题:constructor里的this指向的是创建的实例对象,方法里的this指向这个方法的调用者。(通常在全局声明一个that,在constructor函数中将this赋值给that,此时that指向实例化对象)
4.面向对象tab栏案例