2013-11-02 342 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

这是正确的原型方法有权访问基于这些变量的实例...是的,这就是我问的。 –