私がやろうとしているのはこれです:
私の基本コード:
var Obj = function() {
this.do = function() {};
this.stop = function() {};
this.kill = function() {};
};
Obj.prototype.load = function() {};
目的の変換:
var ConvObject = function() { };
ConvObject.prototype = (typeof Obj == "function")? new Obj : Obj;
この例は機能します(変換部分の場合)。ConvObject には、Obj のすべてのメソッドがあります。しかし、私の場合、Obj のデフォルト コンストラクターを実行したくありません。私はこれを避けたいと思います。確かに、新しい Obj を実行したくありません。
これを達成するためにさまざまな方法を試しました。これが私が今までに見つけた最良の答えです:
var getSizeOf = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
var ConvObject = function() { };
if ((typeof Obj == "function") && getSizeOf(Obj.prototype) == 0) {
ConvObject.prototype = new Obj;
}
else {
ConvObject.prototype = (typeof Obj == "function")? Obj.prototype : Obj;
}
これは、Obj が次のようになっている場合に機能します。
var Obj = new function() {};
Obj.prototype.do = function() {};
Obj.prototype.stop = function() {};
Obj.prototype.kill = function() {};
Obj.prototype.load = function() {};
または、次のようになっている場合:
var Obj = function() {
this.do = function() {};
this.stop = function() {};
this.kill = function() {};
this.load = function() {};
};
しかし、上記の基本コードがある場合、このソリューションは失敗します。デフォルトコンストラクターへのこの呼び出しを回避するにはどうすればよいですか? 助けてくれてありがとう!