- 类中方法的不可枚举性
类中所有定义的方法都是不可枚举的。
class Point{
constructor(x,y){
//...
}
toString(){
//...
}
}
//Object.keys是对象属性方法之一,其他的有for...in... for...of...
Object.keys(Point.prototype);//[]
Object.getOwnPropertyNames(Point.prototype)//["constructor","toString"]
//这点ES5中是可枚举的
- 构造函数的改变
通过构造函数生成的对象不一定是这个类的实例,因为构造函数完全可以返回一个其他对象。
class Point{
constructor(){
return Object.create(null);
}
}
- Class 表达式
const Point = class P{
getName(){
return P.name;
}
};
let p = new Pint();
p.getName();//P
为什么会是P呢?
先来说一下这个类的名称是什么?是Point。
P只是用来类内使用的,表示当前类。在右边来说,类名是P所以getName返回的便是P。但又赋值给Point,所以类名便是Point。
当然,如果类中如果没有用到当前类的话,可以省略。
const Point = class{
//...
}
- 匿名类
let inst = new class{
constructor(s){
console.log(s);
}
}(s);
上述代码匿名类立即被执行生成实例赋值给inst
- class不存在变量提升
这与继承有关,父类必须要写在子类的前面。
class Parent{
//...
}
class Child extends Parent{
//...
}
//以下代码会报错
let t = new Point();
class Point{
//...
}