我正在将一些Java代码转换为Javascript,Java对象有一个静态初始化块,用于填充对象中的两个数组。我的理解是,无论创建了多少个对象,这个初始化程序只运行一次。我可以在Javascript中做这样的事情吗?
Java代码:
public final class MyObject {
private MyObject() { }
// ...
static {
// Run once static init code here
}
}
这种一次性运行样式初始化可以在Javascript中完成吗?
由于
答案 0 :(得分:5)
不是真的。
“静态”成员的整个概念并不真正适用于javascript。你可以通过“公共”的方式实现它们。
这样做可以满足您的需求,但它实际上只是“由构造函数触发一次运行此函数”的一堆语法。
function MyObject()
{
if ( 'undefined' == typeof MyObject.__initialized )
{
// static stuff
alert( 'hi' );
MyObject.__initialized = true;
}
// Proceed with constructing instance of MyObject
}
new MyObject();
new MyObject();
答案 1 :(得分:3)
// Object Contructor
function MyObject(name) {
if (!this.done) {
this.done = true;
// init stuff
// ...
}
this.name = name;
return this; // optional
}
// available in all instances
MyObject.prototype.done = false;
答案 2 :(得分:3)
是的,ES6类有一些技巧。
class MyClass {
static #unused = MyClass.#init();
static #init() {
// Your initialization logic
}
}