ES6中的Class和JS的比起来无疑是让对象原型的写法更加清晰,更像面向对象编程的语法而已,注意一个问题ES6里面的Class的内部定义的所有方法都是不可枚举的,而且在ES6中Class不存在变量提升。(注意:Class同时具有prototype属性和__proto__属性,所以同时存在两条继承链)。
Class的基本写法示例代码
lass Test { constructor(value){ //如果没有构造器那么会自动添加一个空的构造器 this.value = value; console.log(" Hi "+ value); } sayAge (age) { console.log(" 年龄是 "+ age); } } var a = new Test("张三"); // Hi 张三 console.log(a.sayAge(20)); // 年龄是 20
Class是可以继承的,也可以重写继承方法也可以在继承方法中添加新的方法,在继承里面有个关键字super代表了父类的实例,而且继承链总是指向父类,如果在某个函数前面加上static关键字,那么该方法则不会被继承,注意:class内部只有静态方法没有静态属性。
class Test { constructor(value){ this.value = value; console.log(" Hi "+ value); } sayAge (age) { console.log(" 年龄是 "+ age); return true; } } class Jicheng extends Test { sayTizhong(tizhong){ console.log("体重是"+tizhong); return true; } } var a = new Jicheng("张三"); // Hi 张三 console.log(a.sayAge(20)); // 年龄是 20 true console.log(a.sayTizhong("60kg")); //体重是60kg true
最后说个方法是new.target,这个函数可以用作于确定构造函数是这么被调用的。