2010-06-30 126 views
1

我將一些Java代碼轉換爲Javascript,並且Java對象具有一個靜態初始化塊,用於填充對象中的兩個數組。我的理解是,無論創建多少個對象,此初始化器都只運行一次。我可以在Javascript中做這樣的事情嗎?Javascript對象 - '靜態初始化'

Java代碼:

public final class MyObject { 

     private MyObject() { } 

     // ... 

    static { 
      // Run once static init code here 
    } 

} 

可這一次運行風格初始化時在Javascript中做了什麼?

謝謝

+0

你是如何定義的JavaScript類? – Maz 2010-06-30 19:25:13

+1

將Java代碼轉換爲JavaScript?是吧?他們的用例是完全不同的......記住JavaScript不是超集的子集,甚至不是與java的相交。他們只是分享前4個字母。 – 2010-06-30 19:27:09

+1

好吧,我有一些Java代碼,我想在Javascript中也做。在Javascript中,我的類定義如下: function MyClass(){ this.name =「」; } MyClass.prototype.doStuff = new function(a,b){...} – Jason 2010-06-30 19:30:50

回答

5

不是真的。

「靜態」成員的整體概念並不適用於JavaScript。你可以實現它們,但只能以「公共」方式實現。

這種做你所要求的,但它實際上只是一堆kludgy語法「一次運行該函數由構造函數觸發」。

function MyObject() 
{ 
    if ('undefined' == typeof MyObject.__initialized) 
    { 
    // static stuff 
    alert('hi'); 

    MyObject.__initialized = true; 
    } 

    // Proceed with constructing instance of MyObject 
} 

new MyObject(); 
new MyObject(); 
+0

@Peter,這個解決方案是否與worker/threads很好地交互? – Pacerier 2014-06-24 23:07:17

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;