我想要做的是這樣的:的Javascript功能轉換聲明爲功能字典原型
我的基本代碼:
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() {};
};
但是,這解決方案失敗時,我有上面的基本代碼。我怎樣才能避免這個調用默認的構造函數? 感謝您的幫助!
是的,但他不想調用構造函數。由於在這種情況下構造函數的代碼是將屬性添加到對象的唯一方法,因此只能通過調用構造函數來獲取它們。 – Pointy
你是對的。我必須調用構造函數才能擁有這些功能。謝謝你的回答! – Jeep87c