我試圖讓我的頭繞着使用「僞古典繼承」風格的JS繼承。我做了很多谷歌搜索,並閱讀了經典文章。我熟悉Java的類結構,並試圖理解JS的原型風格。我正在尋找香草JS,因爲我想先了解基礎知識。JavaScript繼承範圍問題
我有一個簡單的父/子測試類的設置,需要一些幫助的範圍規則。
1.)我什麼時候在類中定義方法而不是類之外的方法?
2.)當我使用原型樣式創建方法時,如何訪問私有變量和私有函數?
function superClass(name){
this.name = name;
var privateValue = "I'm Private";
this.outputPrivate2 = function(){
alert(privateValue); //works fine
}
}
superClass.prototype.outputPrivate = function(){
alert(this.privateValue); //outputs undefined..
alert(superClass.prototype.privateValue) //also undefined
}
3.)子對象如何調用私有函數或訪問父類的私有變量?
4.)子對象何時應該手動調用父構造函數?
subClass2.prototype = new superClass(); // Define sub-class
subClass2.prototype.constructor = subClass2;
function subClass2(name) {
this.name = name;
this.Bye = function() {
return "Bye from subClass - " + this.name;
}
this.testm = function(){
superClass.prototype.SomeParentMethod.call(this, "arg1", "arg2");
}
}
var parent = new superClass("parent");
var child = new subClass("child1");
parent.outputPrivate(); //undefined
parent.outputPrivate2(); //I'm private
child.outputPrivate(); //undefined
child.outputPrivate2(); //I'm private
我不得不在代碼的80%被複制,所以我創建了一個父對象和三個子對象的三個對象。子對象具有使用和處理來自父項的私有數據的方法。我得到這個工作的唯一方法是使所有變量公開,我不喜歡。再一次,我對Java的熟悉程度,所以我可能會努力讓JS像Java一樣工作。
一個構造函數的範圍內定義的變量和函數可以訪問的唯一方法是,如果他們是通過關閉訪問 – 2011-02-28 23:08:05
你能提供一個我如何訪問「privateValue」的例子嗎?它不需要在構造函數中。我可以設置一個包含我需要的私有數據的初始化方法。基本上我有許多方法需要能夠共享的內部數據。 – David 2011-02-28 23:12:31
抱歉的錯誤答案〜 – Shad 2011-02-28 23:17:51