天天看點

JavaScript基礎 面向對象

構造器代碼必須放在整個類定義的最後,這樣做是為了保證在它當中被調用的方法都已經被定義了。

私有執行個體成員在 JavaScript 中實際上可以用函數内的局部變量來實作,它相當于類的私有執行個體成員

他們隻能在該類的對象内部被使用,在對象外無法使用。

建立私有方法有兩種方式,一種是直接在類中定義方法,另一種是先定義一個局部變量(私有執行個體字段),然後定義一個匿名方法指派給它。

1、prototype 方式隻應該在類外定義。this 方式隻能在類中定義。

2、prototype 方式如果在類中定義時,則存取私有執行個體成員時,總是存取最後一個對象執行個體中的私有執行個體成員。

3、prototype 方式定義的公有執行個體成員是建立在類的原型之上的成員。this 方式定義的公有執行個體成員,是直接建立在類的執行個體對象上的成員。

基于前兩點差別,我們可以得到這樣的結論:如果要在公有執行個體方法中存取私有執行個體成員,那麼必須用 this 方式定義。

關于第三點差別,我們後面在讨論繼承時再對它進行更深入的剖析。這裡隻要知道有這個差別就可以了。

不要把通過 prototype 方式建立的公有執行個體方法定義在類的内部!

定義的方式就是給 className.memberName 直接指派。

一定不要将公有靜态成員定義在它所在的類的内部

myClass = new function() {...}

繼承:一種是原型繼承法,一種是調用繼承法

子類繼承來的公有執行個體方法中,如果調用了私有執行個體字段或者私有執行個體方法,則所調用的這些私有執行個體成員是屬于父類的。

子類中定義的執行個體方法,如果調用了私有執行個體字段或者私有執行個體方法,則所調用的這些私有執行個體成員是屬于子類的。

定義在父類原型上的方法,會被子類繼承。

子類中定義的執行個體方法是不能通路父類中定義的私有執行個體成員的。

靜态成員是不會被繼承的。

定義在父類原型上的方法,不會被子類繼承。

子類中定義的執行個體方法同樣不能通路父類中定義的私有執行個體成員的。

靜态成員同樣不會被繼承的。

是通過調用繼承法,可以實作多繼承。也就是說,一個子類可以從多個父類中繼承通過 this 方式定義在父類内部的所有公有執行個體成員。

function subClass() {

// inherit

parentClass.call(this);

function parentClass() {

this.method = function() {

alert("parentClass method");

}

var method = this.method;

method.call(this);

alert("subClass method");

subClass.prototype = new parentClass();

subClass.prototype.constructor = subClass;

var o = new subClass();

o.method();

繼續閱讀