如果我有一個對象,我想從「超級對象」中「繼承」方法以確保一致性。他們將混合變量。 修訂JavaScript繼承
ParentObj = function()
{
var self = this;
this.interval = null
this.name = "";
this.timeout = 1000;
this.stop = function()
{
clearInterval(self.interval);
};
this.start = function()
{
self.log("Starting up");
setTimeout(function(){
self.getData(true);
self.interval = setInterval(function(){
self.getData();
}, self.timeout)
}, 1000);
};
this.log = function(msg)
{
require("sys").log(self.name + ": " + msg);
};
this.getData = function(override)
{
if(override || self.interval)
{
/**
* Allow
*/
self.log(new Date());
}
else
{
self.log("Unable to override and no interval");
}
}
}
ChildObj = function()
{
var self = this;
this.name = "Child";
this.timeout = 500;
this.start();
setTimeout(function(){
self.stop();
}, 2000);
}
ChildObj.prototype = new ParentObj();
var c = new ChildObj();
這似乎並不正常工作,特別是它沒有看到self.interval
,無法將其清除。我打開其他JavaScript繼承方法,如果它們存在,但我真的需要開始封裝到父項的東西。有三個或四個功能是相同的,但有時會更改,這意味着我必須運行十幾個文件才能進行更改,而不是簡單地更改父項。
通過一些建議,我試圖更清楚地定義我要做的功能。理想情況下,所有的「孩子」將有幾個獨特的設置(名稱,間隔,配置設置)和一個getData()
方法,而父母管理啓動,停止,記錄和其他任何事情。
誰給了downvote,請評論 - 我真的很想知道我錯了。 – naivists 2010-09-22 17:51:17
-1不是我的,但這是非常錯誤的。你不需要'var self = this'。在這種情況下,執行'this.interval ='也是一樣的。此外,您正在將函數分配給'interval',而不是間隔ID。正確的代碼是'this.interval = setInterval(/ * func * /,1000);' – MooGoo 2010-09-22 17:52:25
@MooGoo,感謝評論,我不知道OP想要在構造函數中初始化區間。更新我的代碼。 – naivists 2010-09-22 18:03:17