ES6新特性 Class的实现

ES5之前类的继承是靠原型实现的,而这一过程的实现又涉及到一大堆的原型定义,特别是ES5推出了Object.definePorperty()方法后,代码更加晦涩。但是这种方式正是javascript这种弱类型语言的灵活性所在,而SE6为了使得javascript的类继承像java之类的语言一样更加简单纯粹,也推出了class这个定义类的关键字,虽然失去了一点灵活性,但是代码变得更加简单了。

像其他语言一样,SE6用关键字class定义一个类,该类有一个名为constructor()的函数,SE6的类必须有这个函数,如果没设就会默认添加一个,类似于java的构造方法,这个函数中的this指向生成的实例。

class Animal{
constructor(color){
this.color = color;
};
run() {
console.log("run");
}
}

这样我们就定义了一个类了,这里定义了一个实例属性和为原型添加了一个方法,类中的分号是可选的。

这里的run()是原型上的方法。

类只能先声明后使用,不会变量提升。

原型上不能定义属性,只能定义get(取值器)和set(设值器),取值器和设值器都是在原型上的

class Animal{
constructor(color){
this.color = color;
};
get _color(){
return this.color;
}
set _color(value){
return this.color = value;
}
}
var am = new Animal();
am._color = 'red';
console.log(am._color);//red
console.log(am.color);//red

还有一种方法就定义属性在constructor内部,通过继承得到原型的属性

class Animal{
constructor(color){
this.color = color;
}; }
class Bear extends Animal{
constructor(){
super();
}
}
console.log(new Bear().color);

接下来我们定义一个类的静态方法,只需要添加static关键字就可以了,这时这个run()就不是原型上的方法了,而是类的静态方法。

class Animal{
constructor(color){
this.color = color;
};
static run() {
console.log("run");
}
}
Animal.run();

定义一个静态属性,静态属性必须在类定义完之后才能定义

class Animal{
constructor(color){
this.color = color;
};
}
Animal.footer = 3;
console.log(Animal.footer);//3

以上就是类的定义的全部内容

上一篇:XML及PullParser解析


下一篇:Linux(centos7)下安装Docker