在编写基于JavaScript的游戏时,我通常使用对象池来减少GC工作。这通常涉及将构造函数应用于现有对象,例如:
constructor.apply(object, arguments);
这样,构造函数既可用于创建新对象,也可用于“设置”现有对象。 (我见过其他类似的池系统。)
问题是JavaScript类构造函数(即使用'class'关键字创建)只能使用'new'调用,这意味着上面的代码不再有效。
我的问题是,是否有一种实用的方法来使用通过'class'创建的类来池化?或者,这是放弃“课堂”并且只是“手动”设置(所谓的)课程而不使用“class”关键字的最佳选择?
您只需在init
方法中编写初始化逻辑,然后在构造函数中调用this.init()
,而不是重新应用构造函数,这是一件坏事并且令人困惑。
当你想重新初始化一个对象时,只需调用obj.init()
,每个人都能理解它。
class Foo {
constructor(...args) {
this.init(...args)
}
init(val) {
this.val = val
}
}
const f = new Foo(42)
console.log(f.val)
f.init(43)
console.log(f.val)