このアプローチが有効かどうかについて議論しないでください。有効な人もいれば、有効でない人もいます。
これが私の超小規模クラスのフレームワークです。何も返さない/未定義にするだけで、完全にプライベートな静的になることに注意してください(はい、これには用途があります)。または、すべてを返して、完全にパブリックな静的にすることもできます。
非常にシンプルで、約 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');
今質問に:
インスタンス変数を明示的にリストする方法はありますか。それらをコンストラクターに設定する代わりに、フレームワークに何らかの方法で配置できますか?