偽古典繼承

它是使用原型繼承來模擬經典繼承 ,它展示了原型的強大程度。它的目的是使語言對來自其他語言的程式設計師更具吸引力。

Version < 6

重要說明 :由於語言模擬了傳統的類, 因此 ES6 使用偽 calssical 繼承是沒有意義的。如果你不使用 ES6,你應該 。如果你仍然想使用經典繼承模式並且你處於 ECMAScript 5 或更低版本的環境中,那麼偽經典是你最好的選擇。

class 只是一個用 new 運算元呼叫的函式,它被用作建構函式。

function Foo(id, name) {
    this.id = id;
    this.name = name;
}

var foo = new Foo(1, 'foo');
console.log(foo.id);

控制檯輸出

1

foo 是 Foo 的一個例項。JavaScript 編碼約定說如果函式以大寫字母開頭,它可以被稱為建構函式(使用 new 運算元)。

要向新增屬性或方法,你必須將它們新增到它的原型中,該原型可以在建構函式的 prototype 屬性中找到。

Foo.prototype.bar = 'bar';
console.log(foo.bar);

控制檯輸出

bar

事實上,Foo 作為建構函式所做的只是使用 Foo.prototype 建立物件,因為它是原型。

你可以在每個物件上找到對其建構函式的引用

console.log(foo.constructor);

function Foo(id, name){…

console.log({ }.constructor);

function Object(){[native code]}

並且還使用 instanceof 運算子檢查物件是否是給定類的例項

console.log(foo instanceof Foo);

真正

console.log(foo instaceof Object);

真正