在编写这样的 Typescript 类时:
class Foo {
bar() { }
}
Run Code Online (Sandbox Code Playgroud)
有时将其重写为:
class Foo {
bar = () => { }
}
Run Code Online (Sandbox Code Playgroud)
主要原因是我可以将 bar 作为回调传递给其他东西,但保留this引用。
然而,这感觉有点“奇怪”。函数和属性有自己的语法,对函数使用属性语法感觉就像我做错了事。
不过好处是显而易见的。通常你会想要this引用类的当前实例,所以在这方面感觉它应该是默认/理智的行为,除非你想要this明确地重新关联,。不过这种情况非常罕见,如果我想使用这种行为,我可能会将这些函数完全保留在类之外。
所以我的问题是……有充分的理由不这样做吗?this除非明确要求,否则我们是否应该始终使用箭头函数并选择退出重新绑定?
this无论调用语法如何都保持相同是您应该使用箭头函数的原因之一。这bar = () => { }是完全适合您的用例的语法。
但有一些差异可能很重要。
class Foo {
bar() { }
}
Run Code Online (Sandbox Code Playgroud)
这将创建一个函数,只需一次,并将其放在 上Foo.prototype.bar,并且它纯粹是通过调用 syntax 进行绑定的foo.bar()。这是快速且内存高效的。
class Foo {
bar = () => { }
}
Run Code Online (Sandbox Code Playgroud)
这会在构造函数中创建函数,并绑定this到实例,而不管函数是如何调用的。这比较慢,现在每个实例在内存中都有一个唯一的函数对象,它必须跟踪。
如果您正在创建此类的大量实例,并且性能对您的项目很重要,则您可能会开始遇到内存问题,因为每个实例的内存占用量更高。
也就是说,过早的优化是万恶之源。使用对你来说更容易的那个,除非你一次对你的类的数万个实例进行昂贵的处理。
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |