實際上,你可以找到這個問題的答案也in my answer to previous question,它類似於其它語言的繼承。
如果擴展一個類,子類的構造函數必須接受它自己的參數和父類的參數。因此,假如您有:
function Parent(a) {
this.foo = a;
};
// and
function Child(b, a) {
Parent.call(this, a); // executes the parent constructor for this instance
this.bar = b;
alert(this.foo);
};
inherits(Parent, Child);
(的inherits
實現可以在this answer找到)。
裏面Child
你必須調用父類的construtor和傳遞的參數,類似於你如何在Java或Python這樣做。
如果你有很多的參數,那麼你可以使用arguments
對象,使事情變得更簡單:
function Parent(a, b, c, d) {...};
function Child(e, f) {
// c and d are parameters for `Child`
// arguments[0] == e
// arguments[1] == f
// all other arguments are passed to Parent, the following
// creates a sub array arguments[2..n]
Parent.apply(this, [].slice.call(arguments, 2);
/...
}
// later
var child = new Child(e, f, a, b, c, d);
一般來說,myChild.prototype = new myClass();
是不是一個很好的遺傳模式,因爲大多數的時間,班級期待一些論點。這不會爲每個實例執行父構造函數,而只對所有實例執行一次。
你的第一個片段缺失'()',如果你想字符串'bar'那麼你需要引用它。 – pimvdb 2012-03-05 14:25:24
編輯,修復錯誤 – user1209203 2012-03-05 14:26:13
我不知道,你想通過'「酒吧」'。哪個功能應該接受並設置它?該子類應設置它,但你不希望它傳遞到子類 - 你能否詳細說明嗎? – pimvdb 2012-03-05 14:28:06