Max*_*888 18 javascript es6-class
我正在努力理解在构造函数内部和外部定义属性之间的区别。在下面的示例中,两个属性都可以在实例上以相同的方式访问,有什么区别?
class Foo {
constructor() {
this.bar = 1;
}
baz = 1;
}
const foo = new Foo();
console.log(foo.bar, foo.baz); // 1 1
Run Code Online (Sandbox Code Playgroud)
Cer*_*nce 17
他们做同样的事情。
在构造函数外部定义属性是新的类字段语法。如果您需要支持较旧的浏览器,请使用构造函数方法,或使用 Babel 首先将代码转换为较旧的语法。
请注意,类字段在构造函数完成之前运行 - 要么在调用之后super(如果有),要么在构造函数的一开始运行。
class Foo {
prop = console.log('Class field running');
constructor() {
this.prop2 = console.log('Constructor running');
}
}
const foo = new Foo();Run Code Online (Sandbox Code Playgroud)
相关:私有字段(也是非常新的语法)必须在构造函数之外初始化,以便类可以在编译时了解哪些字段是私有的:
class Foo {
constructor() {
this.bar = 1;
// Not OK:
// this.#foo = 1;
}
// OK:
#baz = 1;
}
const foo = new Foo();Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8433 次 |
| 最近记录: |