June 4,2008

Javascript Overriding Method : Javascript如何擴充繼承類別的函式?

題描述:在Javascript中,A'類別'繼承B'類別'(透過prototype的方式),A類別就擁有B的函式可以使用,A要透過怎樣的方式修改(override)B的函式,能保有B函式的功能,且新增A的功能進去?

(詳細描述如下↓)


舉例:

var B = function() {}
B.prototype = {
    printMessage : function() { alert('B hello world'); }
}

var A = function() {    this.printMessage(); }
A.prototype = new B();

很顯然的上面的例子會跳出的訊息為"B hello world",這時候我override printMessage(),會取代掉原本B類別中函式printMessage()的功能,如下↓

var B = function() {}
B.prototype = {
  printMessage : function() { alert('B hello world'); }
}

var A = function() {    this.printMessage(); }
A.prototype = new B();
A.prototype.printMessage = function() {    alert('A hello world'); }

上面的例子會印出"A hello world",顯然也不是我要的,同時要擁有A類別中新定義的函式功能與B繼承類別的函式功能,寫法如下:

var B = function() {}
B.prototype = {
  printMessage : function() { alert('B hello world'); }
}

var A = function() {    this.printMessage(); }
A.prototype = new B();
A.prototype.printMessage = function() {
    alert('A hello world');
   
B.prototype.printMessage.apply(this);
}

大功告成 :P

Technoratitechnorati tags: , , , , , , , ,


Posted by evilsmile at 樂多Roodo! │22:43 │回應(2)引用(0)Programming_程式語言
樂多分類:網路/3C 共同主題:Programing 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/6132413
回應文章
我訂閱了你的部落格,因為很喜歡,希望你也訂閱我的。
Posted by 阿宏 at August 7,2008 11:33

got it :P
Posted by evilsmile at August 11,2008 13:09