与 JavaScript 类 合并
Pooling with JavaScript classes
在编写基于 JavaScript 的游戏时,我通常使用对象池来减少 GC 工作。这通常涉及将构造函数应用于现有对象,例如:
constructor.apply(object, arguments);
这样,构造函数既可用于创建新对象,也可用于 'setting up' 现有对象。 (我见过其他做类似事情的池化系统。)
问题是 JavaScript class 构造函数(即使用 'class' 关键字创建的)只能用 'new' 调用,也就是说上面的代码没有更长的作品。
我的问题是,是否有一种实用的方法可以使用通过 'class' 创建的 classes 进行池化?或者这里最好的选择是放弃 'class' 并只设置(所谓的)classes 'manually' 而不使用 '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)
在编写基于 JavaScript 的游戏时,我通常使用对象池来减少 GC 工作。这通常涉及将构造函数应用于现有对象,例如:
constructor.apply(object, arguments);
这样,构造函数既可用于创建新对象,也可用于 'setting up' 现有对象。 (我见过其他做类似事情的池化系统。)
问题是 JavaScript class 构造函数(即使用 'class' 关键字创建的)只能用 'new' 调用,也就是说上面的代码没有更长的作品。
我的问题是,是否有一种实用的方法可以使用通过 'class' 创建的 classes 进行池化?或者这里最好的选择是放弃 'class' 并只设置(所谓的)classes 'manually' 而不使用 '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)