前端基础-ECMAScript类和对象

第9章 类和对象

1、类的定义

ES6中添加了对类的支持,引入了class关键字

ES6中提供的类实际上只是JS原型模式的包装。现在提供class支持后,对象的创建、继承更加直观。

class类中,可以包含 构造方法、实例方法、静态方法。

//类的定义
class A {
	//ES6中的构造方法(类的属性,定义在构造方法中)
    constructor(name) {
        this.name = name;
        this.age = 30;
    }
    //实例方法
    say() {
        console.log('我是A中的实例方法say,我的名字是 '+this.name);
    }
  	//静态方法(静态方法与实例方法 同名互不影响)
 	static say(){
      	console.log("我是A中的静态方法say");
 	}
}

//直接调用静态方法
A.say();

//实例化类 调用实例方法
var a = new A('Tom');
a.say();

//类也有原型对象
console.log(A.prototype);
console.log(a.__proto__)

注意

1.class类中不能直接定义属性,只能定义方法,方法之间不需要也不能使用逗号隔开

2.类只能先定义,再使用,没有提升效果。

3.静态方法只能通过类名直接调用,实例方法只能将实例化成对象后调用。

2、类的继承

注:父类有构造函数,子类构造函数中,需要调用super() 实现父类的构造函数,否则报错。

//类的继承
//父类A
class A {
	//ES6中的构造方法
    constructor(name) {
        this.name = name;
        this.age = 30;
    }
    //实例方法
    say() {
        console.log('我是A中的实例方法say,我的名字是 '+this.name);
    }
  	//静态方法
 	static say(){
      	console.log("我是A中的静态方法say");
 	}
}

//子类B
class B extends A {
  	//构造方法
    constructor(name) {
    	//使用函数形式的super(), 直接调用父类构造方法
      	//只要子类写了构造方法,就必须调用super(),且必须在使用this之前
        super(name);
    }
  	//实例方法
  	//子类方法 会覆盖父类同名方法
    say() {
      	//子类方法中,可以使用super.方法() 调用父类的非构造方法
      	//当前方法是实例方法,则调用父类的实例方法
      	//当前方法是静态方法,则调用父类的静态方法
      	//super.say(); 
        console.log('我是B中的实例方法say,我的名字是 '+this.name);
    }
  	
    static coding() {
        console.log('我是B中的静态方法coding');
    }
  	
}
//调用静态方法
B.say(); //A的静态方法
B.coding();//B自己的静态方法

//调用实例方法
var b = new B('Lucy');
b.say();//B中的实例方法say  //如果B中没有,才调用A的实例方法say
b.coding();//报错,B和A中都没有实例方法coding  (只有静态方法)
发布了1783 篇原创文章 · 获赞 1904 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/weixin_42528266/article/details/105113418