2012-03-20 83 views
0

我正在簡化我的示例以瞭解我的問題。我有一個具有特權功能的基類Javascript類。我真的需要隱藏myVar以免被看到,我也很想繼承baseClass具有特權功能的Javascript繼承

function baseClass() { 
    var myVar = new coolClass(); 

    this.myPrivileged = function() { 
    myVar.coolFunction(); 
    } 
} 

我得到的問題是,我想繼承,像這樣:

function childClass() { 

} 
childClass.prototype = new baseClass(); 
childClass.prototype.reallyCoolFunction = function() {//Really cool stuff} 

但myVar的只有一個實例將永遠被創建,這將無法工作,因爲coolClass例如具有相關屬性。 所以,如果我這樣做:

var x = new childClass(); 
var y = new childClass(); 

x和y將有baseClass.myVar

相同的實例所以就我自己看着辦,我有兩個選擇:

  1. 充分利用myPrivileged函數原型函數並公開myVar
  2. baseClass的內部複製並粘貼到childClass(這讓我想要堵嘴)

我不是javascript的大師,所以我希望有人會有一個好主意。

在此先感謝

+0

你應該看看[coffeeScript](http://coffeescript.org/) – Kyle 2012-03-20 03:58:49

+0

@凱爾:你至少應該提出一些理由來評論你的評論。大多數人不願意開始使用一些編譯成JS的語言,因此無法進行調試。 – 2012-03-20 04:11:06

+0

@JuanMendes「無法調試?」不,不是。這只是你的意見。 – Kyle 2012-03-20 04:16:59

回答

0

首先,你不需要創建基類的一個實例只是設置繼承。您正在創建一個從未使用過的coolClass實例。使用代理構造

function childClass() { 
    ... 
} 

function surrogateCtor() { 

} 

surrogateCtor.prototype = baseClass; 
childClass.prototype = new surogateCtor(); 

在你childClass,你需要調用父類的構造

function childClass() { 
    baseClass.call(this); 
} 

這將確保該基類初始化每次實例孩子上課時間http://jsfiddle.net/mendesjuan/h2ypL/

看我的帖子關於遺傳在JS http://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html