首頁 >常見問題 >es5實作繼承的方法

es5實作繼承的方法

DDD
DDD原創
2024-08-13 16:48:20724瀏覽

本文討論了 ES5 中的繼承方法,重點在於三種主要方法:基於原型的繼承、構造函數繼承和寄生繼承。文章解釋了每種方法的優點和缺點,提供了程式碼例如

es5實作繼承的方法

ES5繼承方法

在ES5中,繼承可以透過幾種方法來實現:

基於原型的繼承

這是最最常用常見的方法在ES5 中。它涉及創建一個基類(父類),然後透過創建繼承基類的屬性和方法的新物件來「子類化」它。這是透過操作子類別物件的 __proto__ 屬性來完成的。 __proto__ property of the subclass objects.

<code class="javascript">const Animal = {
  eat() {
    console.log("Eating...");
  }
};

const Dog = {
  __proto__: Animal,
  bark() {
    console.log("Woof!");
  }
};

const myDog = Object.create(Dog);
myDog.eat(); // logs "Eating..."
myDog.bark(); // logs "Woof!"</code>

Constructor Inheritance

This approach involves creating a base class constructor function and then extending it by defining a new constructor function that takes the base class constructor as an argument and adds additional properties and methods.

<code class="javascript">function Animal() {
  this.eat = function() {
    console.log("Eating...");
  }
}

function Dog(name) {
  Animal.call(this);
  this.name = name;
  this.bark = function() {
    console.log("Woof!");
  }
}

const myDog = new Dog("Luna");
myDog.eat(); // logs "Eating..."
myDog.bark(); // logs "Woof!"</code>

Parasitic Inheritance

This approach involves creating a temporary object that inherits from the base class and then uses that object to create the desired subclass. It is similar to prototype-based inheritance, but instead of modifying the __proto__

<code class="javascript">const Animal = {
  eat() {
    console.log("Eating...");
  }
};

const Dog = (function() {
  function AnimalProxy() {}
  AnimalProxy.prototype = Animal;
  const proxy = new AnimalProxy();
  proxy.bark = function() {
    console.log("Woof!");
  }
  return proxy;
})();

const myDog = Object.create(Dog);
myDog.eat(); // logs "Eating..."
myDog.bark(); // logs "Woof!"</code>
構造函數繼承🎜🎜此方法涉及創建一個基類構造函數,然後通過定義一個採用基類的新構造函數來擴展它類構造函數作為參數並添加附加屬性和方法。 🎜rrreee🎜寄生繼承🎜🎜此方法涉及建立一個從基底類別繼承的臨時對象,然後使用該物件建立所需的子類別。它類似於基於原型的繼承,但它不是修改 __proto__ 屬性,而是建立一個新對象,充當基底類別和子類別之間的橋樑。 🎜rrreee

以上是es5實作繼承的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:claude封號申訴下一篇:claude封號申訴