我想要做的是:
我的基本代码:
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() {};
};
但是,当我有上面的基本代码时,这个解决方案会失败。如何避免对默认构造函数的调用?谢谢您的帮助!