0

このアプローチが有効かどうかについて議論しないでください。有効な人もいれば、有効でない人もいます。

これが私の超小規模クラスのフレームワークです。何も返さない/未定義にするだけで、完全にプライベートな静的になることに注意してください(はい、これには用途があります)。または、すべてを返して、完全にパブリックな静的にすることもできます。

非常にシンプルで、約 4 行のコードです。次に、より複雑な部分です。以下を参照してください。

config_moduleクラスの種類を決定します。

実装:

$P.klass = function (obj, config_module) {

    // all properties are private ( there is no access )

    if (!config_module) {
        return undefined;
    }

    // all properties are public and static ( there is no instance )

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

    // constructor based, all properties are public and static/instance

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

静的ではなくインスタンス ベースにしたい場合は、返される適切な名前のコンストラクター プロパティを探し、残りのプロパティをプロトタイプ チェーンに配置します。

thisこれはうまく機能します。以下に示すように、インスタンス変数を使用することもできます

    var SForm = $A.klass({

        Name: 'SForm',

        // static based

        S: {
            google:    'https://plus.google.com/_/favicon?domain=',
            pre_url:   /(http:)|(https:)\/\//,
            domain:    /:\/\/(www\.)?([\.a-zA-Z0-9\-]+)/

            // ... blah

        },
        constructor : function (form_elements) {
            this.form_obj = {};
            $A.someKey(form_elements, function (val) {
                if (val.type !== 'checkbox') {
                    this.form_obj[val.name] = val.value;
                } else if (val.type === 'checkbox') {
                    this.form_obj[val.name] = val.checked;
                }
            }, this);
        },
        get: function (key) {
            return this.form_obj[key];
        },
        set: function (key, value) {
            this.form_obj[key] = value;
        },
        getObj: function () {
            return this.form_obj;

        // ... blah

    }, 'constructor');

今質問に:

インスタンス変数を明示的にリストする方法はありますか。それらをコンストラクターに設定する代わりに、フレームワークに何らかの方法で配置できますか?

4

0 に答える 0