es6里面使用class创建类,类里面默认会有一个constructor方法,用于接收参数将其放进实例自身。es6会自动开启严格模式。
class Parent {
constructor(x, y) {
//给实例设置私有属性
this.x = x
this.y = y
}
//直接写在类里的方法相当于在Parent.prototype上创建方法
render() {
}
//函数也是一个对象,也可以直接给这个对象添加方法(与实例无关,使用Parent.fun()进行调用)
static fun() {
}
//想在原型上添加属性,不能直接在类里面添加,只能在类的外面使用Parent.prototype.AA = 'dandan'进行添加
AA = 'dandan' //相当于在实例上添加属性。
//想在这个对象(也就是类)添加私有属性,不能直接在类里面添加,只能在类的外面使用Parent.AA = 'dandan'进行添加
static AA = 'dandan' //无效
}
//当执行new parent(1,2)时,首先会执行constructor方法。
new Parent(1, 2)
类的实例只能调用类的原型的方法和属性,不能使用静态方法和属性
注意:在es6创建类的{}里面只能创建方法(而且不能写箭头函数),不能设置类的属性,属性需要拿到外面进行设置(但已经被拿到es7提议,并且一些babel解析器会默认解析在类里面创建属性的写法)。可以设置实例属性。
继承
class Children extends Parent {
constructor() {
super() //写了constructor必须写super方法,相当于Parent.constructor.call(this)
}
}
在es6继承中,父类的构造器会自动被子类继承。但在构造器里面第一行必须写supper(),supper方法其实是在帮子类调调用父类的构造器。
子类会继承父类的静态方法和静态方法,但是子类实例不会,实例只能继承父类的原型方法和属性。
当父类方法与子类方法重名时,子类实例会优先调用子类的方法。
网友评论