类和模块的内部,默认就是严格模式,所以不需要使用use strict指定运行模式。只要你的代码写在类或模块之中,就只有严格模式可用。
构造
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class User { constructor(id, name) { this.id = id; this.name = name; }
toString() { return `id: ${this.id} name: ${this.name}` } }
let user = new User(1, 'wxnacy'); console.log(user.toString()) // id: 1 name: wxnacy
|
表达式
1 2 3 4 5 6 7 8 9
| const MyClass = class Me { getClassName() { return Me.name; } };
let inst = new MyClass(); inst.getClassName() // Me Me.name // ReferenceError: Me is not defined
|
如果类的内部没用到的话,可以省略Me,也就是可以写成下面的形式。
1
| const MyClass = class { /* ... */ };
|
采用 Class 表达式,可以写出立即执行的 Class。
1 2 3 4 5 6 7 8 9 10 11
| let person = new class { constructor(name) { this.name = name; }
sayName() { console.log(this.name); } }('张三');
person.sayName(); // "张三"
|
getter 和 setter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class MyClass { constructor() { // ... } get prop() { return 'getter'; } set prop(value) { console.log('setter: '+value); } }
let inst = new MyClass();
inst.prop = 123; // setter: 123
inst.prop // 'getter'
|
静态方法
1 2 3 4 5 6 7 8 9 10 11
| class Foo { static classMethod() { return 'hello'; } }
Foo.classMethod() // 'hello'
var foo = new Foo(); foo.classMethod() // TypeError: foo.classMethod is not a function
|