2013-11-02 203 views
0

以下是我使用的當前方法,其中所有內容都是公開的或私有的。不過,我想區分靜態和實例。我將如何添加?實例/靜態變量的JavaScript框架?

obj擁有你的類或對象,並且config_module決定了它是什麼類型的模塊。

所有私有,所有public(靜態集合)或基於構造方法的實例。

如果我確實使用基於實例,我該如何區分靜態和基於實例的屬性?

$P.support = $P.parsel = function (obj, config_module) { 
     $R.Parsel[obj.Name] = obj; 

     // all properties are private 

     if (!config_module) { 
      return undefined; 
     } 

     // all properties are public 

     if (config_module === true) { 
      return obj; 
     } 

     // constructor based, all properties are public 

     if (config_module === 'constructor') { 
      var object_public; 
      if (obj.constructor) { 
       object_public = obj.constructor; 
       delete obj.constructor; 
      } 
      $A.someKey(obj, function (val, key) { 

       // like this ? 

       if (/^s_/.test(key)) { 
        object_public[key] = val; 

       // like this ? 

       } else if (/^p_/.test(key)) { 
        object_public.prototype[key] = val; 
       } else { 
        object_public.prototype[key] = val; 
       } 

      }); 
      return object_public; 
     } 
    }; 

回答

1

您可以通過添加屬性來構造具有(僞)靜態的東西:

function Something(){} 
Something.getStaticFoo = function(){ return 'foo'; } 
Something.getStaticFoo(); 
var instance = new Something(); 
instance.getStaticFoo(); // error 

如果我理解你的代碼,這是一樣的object_public[key] = val;

+0

好吧......如果我將東西添加到原型,它們也是「靜態」的。那就是每個「班級」只有一個。那麼基於實例的變量呢,我需要使用'this'嗎? –

+0

關於原型的好處;在這種情況下,您可以在所有實例上使用這些方法,但可能會造成混淆,因爲這些方法可以訪問'this'(意味着每個單獨的實例)。這就是你在問什麼基於實例的變量? – bfavaretto

+0

這是正確的原型方法有權訪問基於這些變量的實例...是的,這就是我問的。 –