Javascript類詳解

一、基本概念

Javascript是一種基於對象和事件驅動的腳本語言,最初設計用於瀏覽器端的腳本語言,用於動態增加交互性和用戶體驗。Javascript類是Javascript中進行面向對象編程的基礎,它是一種抽象的數據類型,它對外界提供各種各樣的數據和方法,並具有封裝、繼承和多態三大特徵。

在Javascript類中,重要的概念有實例、屬性和方法。實例是Javascript類派生出來的對象,屬性是實例中存儲的數據值,方法是實例中執行的函數,它們可以在Javascript類中定義。

Javascript類的定義可以通過構造函數、工廠函數和類聲明三種方式實現。其中構造函數是一種傳統的定義方式,工廠函數則是一種簡單實用的方式,而類聲明則是ES6中新增的一種定義方式。

1.構造函數的定義方式

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.sayHello = function() {
  console.log("Hello, my name is " + this.name);
}
var p = new Person("Tom", 20);
p.sayHello();

上述代碼中,我們定義了一個Person類,它有兩個屬性name和age,和一個方法sayHello。使用關鍵字new創建一個新的Person實例,並調用sayHello方法。

2.工廠函數的定義方式

function createPerson(name, age) {
  var person = {
    name: name,
    age: age,
    sayHello: function() {
      console.log("Hello, my name is " + this.name);
    }
  };
  return person;
}
var p = createPerson("Tom", 20);
p.sayHello();

上述代碼中,我們定義了一個createPerson函數,它返回一個新的Person實例對象,這個對象有兩個屬性name和age,和一個方法sayHello。調用createPerson函數創建新的實例對象,並調用sayHello方法。

3.類聲明的定義方式

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  sayHello() {
    console.log("Hello, my name is " + this.name);
  }
}
let p = new Person("Tom", 20);
p.sayHello();

上述代碼中,我們使用ES6的新特性class聲明了一個Person類,它有兩個屬性name和age,和一個方法sayHello。使用關鍵字new創建一個新的Person實例,並調用sayHello方法。

二、繼承和多態

1.繼承

繼承是面向對象編程中的重要特性,它可以讓子類擁有父類中的屬性和方法,並可以添加自己的屬性和方法。在Javascript類中,可以通過prototype鏈來實現繼承。

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.sayHello = function() {
  console.log("Hello, my name is " + this.name);
}

function Student(name, age, school) {
  Person.call(this, name, age); //調用父類構造函數繼承屬性
  this.school = school;
}
Student.prototype = Object.create(Person.prototype); //通過prototype鏈繼承方法
Student.prototype.constructor = Student; //修正構造函數指向
Student.prototype.sayHello = function() { //重寫父類方法
  console.log("Hello, my name is " + this.name + ", I study in " + this.school);
}

var s = new Student("Lily", 18, "MIT");
s.sayHello();

上述代碼中,我們定義了一個Person類和一個Student類,使用Person.call方法繼承Person類的屬性,使用Object.create方法創建了一個繼承自Person類原型的Student類,並重寫了Person類中的sayHello方法。使用關鍵字new創建一個新的Student實例,並調用sayHello方法。

2.多態

多態是面向對象編程中的另一種重要特性,它可以讓不同的對象對同一消息作出相應,從而實現程序的動態性和靈活性。在Javascript類中,可以通過重寫父類方法來實現多態。

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.sayHello = function() {
  console.log("Hello, my name is " + this.name);
}

function Student(name, age, school) {
  Person.call(this, name, age); //調用父類構造函數繼承屬性
  this.school = school;
}
Student.prototype = Object.create(Person.prototype); //通過prototype鏈繼承方法
Student.prototype.constructor = Student; //修正構造函數指向
Student.prototype.sayHello = function() { //重寫父類方法
  console.log("Hello, my name is " + this.name + ", I study in " + this.school);
}

function sayHello(p) { //多態通用方法
  if (typeof p.sayHello === "function") {
    p.sayHello();
  }
}

var p = new Person("Tom", 20);
var s = new Student("Lily", 18, "MIT");
sayHello(p);
sayHello(s);

上述代碼中,我們定義了一個sayHello方法,它會根據對象的不同調用相應的sayHello方法。使用關鍵字new創建新的Person和Student實例,並調用sayHello方法。

三、ES6新特性

ES6是Javascript的重要更新,它新增了一些語言特性,如箭頭函數、模板字面量、解構賦值、for…of循環、let和const關鍵字、類和模塊等。在Javascript類中,ES6的類和模塊是最重要的新特性。

1.類的定義

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  sayHello() {
    console.log("Hello, my name is " + this.name);
  }
}

let p = new Person("Tom", 20);
p.sayHello();

ES6中新增的關鍵字class可以用來定義一個類,它更加簡潔明了,讓Javascript類的定義更加貼近傳統面向對象編程語言的風格。

2.模塊的定義

//math.js
export function square(x) {
  return x * x;
}
export function cube(x) {
  return x * x * x;
}

//main.js
import { square, cube } from "./math.js";
console.log(square(3)); //9
console.log(cube(3)); //27

ES6中新增的關鍵字export和import可以用來定義和引用模塊,它更加簡潔易懂,讓Javascript的模塊化編程更加方便和實用。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ULRW的頭像ULRW
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相關推薦

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

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

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

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

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

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

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

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • C語言貪吃蛇詳解

    一、數據結構和算法 C語言貪吃蛇主要運用了以下數據結構和算法: 1. 鏈表 typedef struct body { int x; int y; struct body *nex…

    編程 2025-04-25

發表回復

登錄後才能評論