0

这是我当前使用的方法,其中所有内容都是公共的或私有的。但是我想区分静态和实例。我将如何添加这个?

obj持有你的类或对象,config_module 确定这是什么类型的模块。

所有私有、所有公共(静态集合)或基于构造方法的实例。

如果我确实使用基于实例的,我如何区分静态属性和基于实例的属性?

   $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;
        }
    };
4

1 回答 1

1

您可以通过向构造函数添加属性来获得(伪)静态内容:

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

如果我理解您的代码,那与object_public[key] = val;.

于 2013-11-02T02:01:40.540 回答