2013-02-25 30 views
4

我想定義一個常數默認值用於JS對象,然後在相同的命名空間引用它在以後的聲明,一拉:在對象命名空間中定義和引用常量值?

var Foo = { 
    // 'constant' value for default key 
    DEFAULT_KEY : "COOKIE_MONSTER", 

    // a map declaration that should ideally reference the default key 
    key_map : { 
    a : Foo.DEFAULT_KEY, 
    b : Foo.DEFAULT_KEY 
    } 
}; 

Foo不會Foo.key_map之前定義,所以Foo.DEFAULT_KEY不是真實的東西。
什麼是設置/使用這些對象常量的正確方法?

回答

2

來到我的腦海裏第一個模式:

var Foo = (function() { 
    var DEFAULT_KEY = "COOKIE_MONSTER"; 
    return { 
     DEFAULT_KEY: DEFAULT_KEY, 
     key_map: { 
      a: DEFAULT_KEY, 
      b: DEFAULT_KEY 
     } 
    } 
})(); 
1

你可以使用一個iife返回所需的對象空間(namespace):

var Foo = (function(){ 
    var namespace = {}; 

    namespace.DEFAULT_KEY = 'COOKIE_MONSTER'; 

    namaespace.key_map = { 
     a : namespace.DEFAULT_KEY, 
     b : namespace.DEFAULT_KEY 
    }; 

    return namespace; 
})();