JavaScript實現繼承

一、js實現繼承的方式

在JavaScript中,實現繼承的方式有兩種:

  • 原型鏈繼承
  • 構造函數繼承

接下來我們詳細探討這兩種繼承方式的特點、優缺點以及使用場景。

二、原型鏈繼承的特點、優缺點及使用場景

原型鏈繼承是JavaScript中最常用的繼承方式之一。其特點如下:

  • 子類的原型對象為父類的實例(通過新建一個空函數來繼承父類,實例化之後將子類的構造函數指向子類本身,從而通過原型鏈來實現類之間的繼承關係)。
  • 子類實例可以訪問父類原型中的方法和屬性。
  • 子類無法訪問父類實例方法和屬性,因為它們都在父類的構造函數中定義。
  • 子類原型上的方法和屬性會被多個實例共享。

原型鏈繼承的優缺點如下:

  • 優點:簡單易懂,易於實現,在實例化過程中無需重複執行父類的構造方法。
  • 缺點:所有子類實例共用同一個原型對象,無法實現多繼承。

適合場景:在一些簡單的繼承場景中較為適用。


function Parent(name) {
  this.name = name;
}

Parent.prototype.sayHi = function() {
  console.log("Hi, " + this.name);
}

function Child(name, age) {
  this.age = age;
}

Child.prototype = new Parent();
Child.prototype.constructor = Child;

Child.prototype.sayAge = function() {
  console.log(this.name + " is " + this.age + " years old.");
}

var c = new Child("Tom", 18);
c.sayHi(); // "Hi, Tom"
c.sayAge(); // "Tom is 18 years old."

三、構造函數繼承的特點、優缺點及使用場景

構造函數繼承是指通過調用父類構造函數來繼承其屬性和方法。其特點如下:

  • 子類的構造函數中使用.call()、.apply()或.bind()方法來調用父類的構造函數,從而繼承其屬性和方法(將父類的屬性和方法賦值給子類實例對象)。
  • 子類實例可以訪問父類構造函數中定義的屬性和方法。
  • 子類無法訪問父類原型中的方法和屬性。
  • 每個子類實例都會有自己的屬性副本,方法無法復用。

構造函數繼承的優缺點如下:

  • 優點:實現簡單,父類的屬性和方法不會被共享,可以實現多繼承(call多父類時需要注意繼承關係)。
  • 缺點:方法無法復用,效率低下。(每個實例對象都有自己的方法,佔用內存且無法復用)

適合場景:在一些需要為子類實例創建獨立的屬性和方法的場景中適用。


function Parent(name) {
  this.name = name;
  this.sayHi = function() {
    console.log("Hi, " + this.name);
  }
}

function Child(name, age) {
  Parent.call(this, name);
  this.age = age;
  this.sayAge = function() {
    console.log(this.name + " is " + this.age + " years old.");
  }
}

var c = new Child("Tom", 18);
c.sayHi(); // "Hi, Tom"
c.sayAge(); // "Tom is 18 years old."

四、js實現繼承的方法有哪些

除了原型鏈繼承和構造函數繼承外,JavaScript還有其他實現繼承的方法。這包括:

  • 組合繼承:將原型鏈繼承和構造函數繼承組合在一起,實現繼承。
  • 寄生組合式繼承:通過寄生方式來對組合繼承進行優化,解決了組合繼承中父類構造函數被多次調用的缺點。
  • class繼承:ES6中新增的語法,通過class和extends來實現繼承。
  • 拷貝繼承:通過拷貝父類屬性和方法的方式,實現繼承。
  • instanceof繼承:通過instanceof運算符判斷父類是否是子類的實例,來實現繼承。

接下來我們將對這些實現方式進行詳細介紹。

五、js實現繼承的方式有幾種

在JavaScript中,一共有5種方式可以實現繼承。分別是:

  • 原型鏈繼承
  • 構造函數繼承
  • 組合繼承
  • 寄生組合式繼承
  • class繼承

不同的繼承方式適用於不同的場景,需要根據具體情況選擇使用哪種繼承方式。

六、js如何實現繼承

在JavaScript中,實現繼承的方式有很多種。我們可以使用原型鏈繼承、構造函數繼承、組合繼承、寄生組合式繼承、class繼承等方式來實現繼承。


// 使用組合繼承的方式實現繼承
function Parent(name) {
  this.name = name;
}

Parent.prototype.sayHi = function() {
  console.log("Hi, " + this.name);
}

function Child(name, age) {
  Parent.call(this, name);
  this.age = age;
}

Child.prototype = new Parent();
Child.prototype.constructor = Child;

Child.prototype.sayAge = function() {
  console.log(this.name + " is " + this.age + " years old.");
}

var c = new Child("Tom", 18);
c.sayHi(); // "Hi, Tom"
c.sayAge(); // "Tom is 18 years old."

七、js繼承的幾種方式

在JavaScript中,實現繼承的方式有5種。分別是:

  • 原型鏈繼承
  • 構造函數繼承
  • 組合繼承
  • 寄生組合式繼承
  • class繼承

不同的繼承方式適用於不同的場景,需要根據具體情況選擇使用哪種繼承方式。

八、js中繼承的方法有哪些

JavaScript中的繼承方法包括:

  • 原型鏈繼承
  • 構造函數繼承
  • 組合繼承
  • 寄生組合式繼承
  • class繼承

每種繼承方式都有其優缺點和適用場景,需要根據具體情況選擇使用哪種繼承方式。

九、js實現多繼承

JavaScript在語言本身並不支持多繼承。不過我們可以通過一些技巧來模擬實現多繼承的功能。這裡介紹兩種實現方式:

  • 原型鏈組合繼承:通過將多個父類的原型對象合併來實現多繼承。
  • 混入方式:通過混入的方式,將多個類的屬性和方法混入到一個類中,從而實現多繼承。

這裡以混入的方式為例,來演示如何實現繼承多個類的功能。


// 父類1
function Parent1(name) {
  this.name = name;
}

Parent1.prototype.sayHi = function() {
  console.log("Hi, " + this.name);
}

// 父類2
function Parent2(age) {
  this.age = age;
}

Parent2.prototype.sayAge = function() {
  console.log(this.name + " is " + this.age + " years old.");
}

// 子類
function Child(name, age) {
  Parent1.call(this, name);
  Parent2.call(this, age);
}

// 混入函數
function mixin(receiver, supplier) {
  for (var prop in supplier) {
    if (supplier.hasOwnProperty(prop)) {
      receiver[prop] = supplier[prop];
    }
  }
  return receiver;
}

// 混入
mixin(Child.prototype, Parent1.prototype);
mixin(Child.prototype, Parent2.prototype);

var c = new Child("Tom", 18);
c.sayHi(); // "Hi, Tom"
c.sayAge(); // "Tom is 18 years old."

十、js實例繼承

JavaScript中的實例繼承指的是在一個對象的基礎上創建一個新的對象,並繼承該對象的屬性和方法。實例繼承的方式有很多種,這裡介紹一些比較常用的方式:

  • 淺拷貝繼承
  • 深拷貝繼承
  • Object.create()

接下來,我們將對這些實現方式進行詳細介紹。

淺拷貝繼承

淺拷貝繼承是指創建一個新的對象,並將父對象的屬性直接複製給子對象。在JavaScript中,可以使用Object.assign()函數來實現淺拷貝繼承。


// 父類
var parent = {
  name: "Tom",
  age: 18,
  sayHi: function() {
    console.log("Hi, " + this.name);
  }
}

// 子類
var child = Object.assign({}, parent);

console.log(child); // { name: "Tom", age: 18 }
child.sayHi(); // "Hi, Tom"

深拷貝繼承

深拷貝繼承是指創建一個新的對象,並將父對象的屬性遞歸複製給子對象。在JavaScript中,可以使用JSON.parse()和JSON.stringify()函數來實現深拷貝繼承。


// 父類
var parent = {
  name: "Tom",
  age: 18,
  address: {
    city: "Beijing",
    street: "Chaoyang Road"
  }
}

// 子類
var child = JSON.parse(JSON.stringify(parent));

console.log(child); // { name: "Tom", age: 18, address: { city: "Beijing", street: "Chaoyang Road" } }

Object.create()

Object.create()是一個靜態

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/239018.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:14
下一篇 2024-12-12 12:14

相關推薦

  • 使用JavaScript日期函數掌握時間

    在本文中,我們將深入探討JavaScript日期函數,並且從多個視角介紹其應用方法和重要性。 一、日期的基本表示與獲取 在JavaScript中,使用Date對象來表示日期和時間,…

    編程 2025-04-28
  • JavaScript中使用new Date轉換為YYYYMMDD格式

    在JavaScript中,我們通常會使用Date對象來表示日期和時間。當我們需要在網站上顯示日期時,很多情況下需要將Date對象轉換成YYYYMMDD格式的字符串。下面我們來詳細了…

    編程 2025-04-27
  • JavaScript中修改style屬性的方法和技巧

    一、基本概念和方法 style屬性是JavaScript中一個非常重要的屬性,它可以用來控制HTML元素的樣式,包括顏色、大小、字體等等。這裡介紹一些常用的方法: 1、通過Java…

    編程 2025-04-25
  • CloneDeep函數在Javascript開發中的應用

    一、CloneDeep的概念 CloneDeep函數在Javascript中是一種深層克隆對象的方法,可以在拷貝對象時避免出現引用關係。使用者可以在函數中設置可選參數使其滿足多種拷…

    編程 2025-04-25
  • JavaScript中的Object.getOwnPropertyDescriptors()

    一、簡介 Object.getOwnPropertyDescriptors()是JavaScript中一個非常有用的工具。簡單來說,這個方法可以獲取一個對象上所有自有屬性的屬性描述…

    編程 2025-04-25
  • JavaScript保留整數的完整指南

    JavaScript是一種通用腳本語言,非常適合Web應用程序開發。在處理數字時,JavaScript可以處理整數和浮點數。在本文中,我們將重點關注JavaScript如何保留整數…

    編程 2025-04-25
  • JavaScript點擊事件全方位指南

    一、click事件基礎 click事件是最常用的鼠標事件之一,當元素被單擊時觸發。click事件適用於大多數HTML元素(<a>、<button>)和SVG…

    編程 2025-04-25
  • 詳解JavaScript onclick事件

    一、onclick的基礎知識 onclick事件是JavaScript中最常用的事件之一,它在用戶點擊某個HTML元素時觸發。通常我們可以通過給元素添加一個onclick屬性來綁定…

    編程 2025-04-25
  • JavaScript淺拷貝

    一、什麼是淺拷貝 在JavaScript中,淺拷貝是一種將源對象的屬性複製到目標對象中的方法。淺拷貝的實現方式有多種,包括直接賦值、Object.assign()、展開運算符、co…

    編程 2025-04-25
  • JavaScript 數組轉成字符串

    一、數組轉成字符串的基本操作 在 JS 中,將數組轉成字符串是一項最基本但也最常見的操作之一。我們可以使用 Array 類型內置的 join() 方法實現。它將數組的元素連接成一個…

    編程 2025-04-25

發表回復

登錄後才能評論