我想做的是:
我的基本代码:
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() {};
};
但是,当我有上面的基本代码时,此解决方案失败了。如何避免对默认构造函数的调用? 谢谢你的帮助!
答案 0 :(得分:1)
使用Object.create()
(或其polyfill)直接从Obj.prototype
继承。
To"继承" Obj
构造函数中的实例方法,您应该在每个ConvObject
:Very simple Javascript inheritance上调用它。无论如何,当这些方法是特定于实例的时候,你需要这样做,否则它们应该在原型上。