1.class 声明会提升,但不会初始化赋值,类似于let const声明变量
代码语言:javascript复制 const b=new B();
function B(){
this.b=100;
}
// 报错 Cannot access 'A' before initializationat
const a=new A()
class A{
constructor(){
this.a=99
}
}
2.class 内部启用了严格模式
代码语言:javascript复制 class A{
constructor(){
//ReferenceError: s is not defined
s=99
}
say(){
//ReferenceError: z is not defined
z=99;
console.log(z)
}
}
const a=new A();
a.say()
3.class所有方法不可枚举(包括静态方法和实例方法)
代码语言:javascript复制 class A {
static eat() {
console.log("会吃")
}
constructor() {
this.name="tom"
}
say() {
console.log("会说")
}
}
console.log(Object.keys(A))//[]
console.log(Object.keys(A.prototype))//[]
4.class中方法没有prototype,所有没有constructor,不能使用new调用
代码语言:javascript复制function b(){
this.a=99
}
const b1=new b()
//普通函数有一个prototype对象,对象中constructor指向函数本身
b===b.prototype.constructor//true
//构造函数的实例对象的__proto__指向构造函数的prototype,
b1.__proto__===b.prototype //true
class Foo {
constructor() {
this.foo = 99;
}
print() {
console.log(this.foo);
}
}
const foo = new Foo();
const fooPrint = new foo.print(); //not a constructor
5.必须使用new 调用class
6.class 内部无法重写类名