次のようなオブジェクトがあります。
var myObj = {
_fooCon: function(f) {
if (typeof f != 'function') throw new TypeError('Bad Foo');
this.fn = f;
},
_barCon: function(f) {
if (typeof f != 'function') throw new TypeError('Bad Bar');
this.fn = f;
},
someFoo: function(v) {
return new this._fooCon(function(x) {
return x + ' Foo ' + v;
});
},
someBar: function(v) {
return new this._barCon(function(x) {
return x + ' Bar ' + v;
});
}
};
これを行う理由は、instanceof
生産的に使用できるようにするためです(つまり、構造的に同一であるにもかかわらず、異なるシナリオで使用される2つのオブジェクトを区別できます)。someFoo
(とsomeBar
が類似しているという事実を無視してください!)
コンストラクター関数を抽象化する方法はありますか。たとえば、作成する必要がある場合は、_bazCon
繰り返す必要はありません。または、バグがある場合、すべてのコンストラクター定義を修正する必要はありませんか?
私はこのようにファクトリーメンバーを作ってみました:
_factory: function(type, f) {
if (typeof f != 'function') throw new TypeError('Bad ' + type);
this.fn = f;
}
...それから:
_fooCon: function(f) { return new this._factory('Foo', f); }
これを試さなくても、うまくいかないことがわかります!私が探しているものを達成する方法についてのアイデアはありますか?