Rumah > hujung hadapan web > tutorial js > Meneroka Pengaturcaraan Berorientasikan Objek (OOP) dalam JavaScript

Meneroka Pengaturcaraan Berorientasikan Objek (OOP) dalam JavaScript

Susan Sarandon
Lepaskan: 2024-12-26 15:21:10
asal
598 orang telah melayarinya

Exploring Object-Oriented Programming (OOP) in JavaScript

Meneroka Pengaturcaraan Berorientasikan Objek (OOP) dalam JavaScript

Tarikh: 17 Disember 2024

Pengaturcaraan Berorientasikan Objek (OOP) ialah paradigma yang menggunakan objek untuk memodelkan entiti dunia sebenar. JavaScript, sebagai bahasa pengaturcaraan serba boleh, menyediakan sokongan teguh untuk OOP melalui prototaipnya, kelas ES6 dan peningkatan moden. Hari ini, kita akan mendalami prinsip dan ciri OOP dalam JavaScript.


Konsep Teras OOP dalam JavaScript

1. Objek

Objek ialah blok binaan OOP. Dalam JavaScript, objek ialah koleksi pasangan nilai kunci.

Contoh: Mencipta Objek

const car = {
  brand: "Toyota",
  model: "Corolla",
  start() {
    return `${this.brand} ${this.model} is starting.`;
  }
};

console.log(car.start()); // Output: Toyota Corolla is starting.
Salin selepas log masuk
Salin selepas log masuk

2. Kelas

Kelas ialah cetak biru untuk mencipta objek. Mereka merangkum data dan tingkah laku. JavaScript memperkenalkan kata kunci kelas dalam ES6.

Contoh: Membuat Kelas

class Animal {
  constructor(name, species) {
    this.name = name;
    this.species = species;
  }

  makeSound() {
    return `${this.name} is making a sound.`;
  }
}

const dog = new Animal("Buddy", "Dog");
console.log(dog.makeSound()); // Output: Buddy is making a sound.
Salin selepas log masuk
Salin selepas log masuk

3. Enkapsulasi

Encapsulation bermaksud menggabungkan data dan kaedah bersama-sama sambil mengehadkan akses terus kepada beberapa komponen. JavaScript mencapai ini menggunakan ahli awam, peribadi dan dilindungi.

Bidang Persendirian

Medan peribadi dilambangkan dengan awalan # dan hanya boleh diakses dalam kelas.

Contoh: Medan Persendirian

class BankAccount {
  #balance;

  constructor(initialBalance) {
    this.#balance = initialBalance;
  }

  deposit(amount) {
    this.#balance += amount;
  }

  getBalance() {
    return this.#balance;
  }
}

const account = new BankAccount(100);
account.deposit(50);
console.log(account.getBalance()); // Output: 150
// console.log(account.#balance); // Error: Private field '#balance' must be declared in an enclosing class
Salin selepas log masuk
Salin selepas log masuk

4. Warisan

Warisan membenarkan satu kelas mewarisi sifat dan kaedah daripada kelas lain menggunakan kata kunci lanjutan.

Contoh: Warisan

class Vehicle {
  constructor(brand) {
    this.brand = brand;
  }

  start() {
    return `${this.brand} vehicle is starting.`;
  }
}

class Car extends Vehicle {
  constructor(brand, model) {
    super(brand); // Calls the parent class constructor
    this.model = model;
  }

  display() {
    return `${this.brand} ${this.model} is ready to go.`;
  }
}

const myCar = new Car("Tesla", "Model S");
console.log(myCar.display()); // Output: Tesla Model S is ready to go.
Salin selepas log masuk
Salin selepas log masuk

5. Polimorfisme

Polymorphism membenarkan subkelas untuk mengatasi kaedah daripada kelas induknya untuk menyediakan pelaksanaan tertentu.

Contoh: Penggantian Kaedah

class Shape {
  area() {
    return "Area is not defined.";
  }
}

class Circle extends Shape {
  constructor(radius) {
    super();
    this.radius = radius;
  }

  area() {
    return Math.PI * this.radius ** 2;
  }
}

const circle = new Circle(5);
console.log(circle.area()); // Output: 78.53981633974483
Salin selepas log masuk
Salin selepas log masuk

6. Abstraksi

Abstraksi memfokuskan pada mendedahkan butiran penting sahaja sambil menyembunyikan kerumitan pelaksanaan. Walaupun JavaScript tidak mempunyai kelas abstrak secara asli, anda boleh mensimulasikannya.

Contoh: Mensimulasikan Abstraksi

class Animal {
  constructor(name) {
    if (this.constructor === Animal) {
      throw new Error("Abstract class cannot be instantiated directly.");
    }
    this.name = name;
  }

  makeSound() {
    throw new Error("Abstract method must be implemented.");
  }
}

class Dog extends Animal {
  makeSound() {
    return "Bark!";
  }
}

const dog = new Dog("Buddy");
console.log(dog.makeSound()); // Output: Bark!
// const animal = new Animal("Some Animal"); // Error: Abstract class cannot be instantiated directly.
Salin selepas log masuk

7. Prototaip dan Rantaian Prototaip

JavaScript ialah bahasa berasaskan prototaip. Setiap objek mempunyai pautan dalaman ke objek lain yang dipanggil prototaipnya.

Contoh: Rantai Prototaip

const car = {
  brand: "Toyota",
  model: "Corolla",
  start() {
    return `${this.brand} ${this.model} is starting.`;
  }
};

console.log(car.start()); // Output: Toyota Corolla is starting.
Salin selepas log masuk
Salin selepas log masuk

8. Komposisi Objek lwn. Warisan

Daripada menggunakan warisan, anda boleh mengarang objek dengan menggabungkan fungsi. Pendekatan ini mengelakkan kerumitan hierarki warisan mendalam.

Contoh: Komposisi

class Animal {
  constructor(name, species) {
    this.name = name;
    this.species = species;
  }

  makeSound() {
    return `${this.name} is making a sound.`;
  }
}

const dog = new Animal("Buddy", "Dog");
console.log(dog.makeSound()); // Output: Buddy is making a sound.
Salin selepas log masuk
Salin selepas log masuk

Prinsip Utama OOP

  1. KERING (Jangan Ulangi Sendiri): Gunakan semula kod melalui kelas dan warisan.
  2. Prinsip SOLID: Ikuti amalan terbaik untuk menulis kod OOP boleh skala dan boleh diselenggara.

Contoh Dunia Sebenar: Sistem Pengurusan Pengguna

Langkah 1: Tentukan Kelas Asas

class BankAccount {
  #balance;

  constructor(initialBalance) {
    this.#balance = initialBalance;
  }

  deposit(amount) {
    this.#balance += amount;
  }

  getBalance() {
    return this.#balance;
  }
}

const account = new BankAccount(100);
account.deposit(50);
console.log(account.getBalance()); // Output: 150
// console.log(account.#balance); // Error: Private field '#balance' must be declared in an enclosing class
Salin selepas log masuk
Salin selepas log masuk

Langkah 2: Lanjutkan Kefungsian

class Vehicle {
  constructor(brand) {
    this.brand = brand;
  }

  start() {
    return `${this.brand} vehicle is starting.`;
  }
}

class Car extends Vehicle {
  constructor(brand, model) {
    super(brand); // Calls the parent class constructor
    this.model = model;
  }

  display() {
    return `${this.brand} ${this.model} is ready to go.`;
  }
}

const myCar = new Car("Tesla", "Model S");
console.log(myCar.display()); // Output: Tesla Model S is ready to go.
Salin selepas log masuk
Salin selepas log masuk

Langkah 3: Buat Kejadian

class Shape {
  area() {
    return "Area is not defined.";
  }
}

class Circle extends Shape {
  constructor(radius) {
    super();
    this.radius = radius;
  }

  area() {
    return Math.PI * this.radius ** 2;
  }
}

const circle = new Circle(5);
console.log(circle.area()); // Output: 78.53981633974483
Salin selepas log masuk
Salin selepas log masuk

Amalan Tugas

  1. Buat hierarki kelas untuk sistem pengurusan perpustakaan.
  2. Melaksanakan kelas BankAccount dengan medan peribadi untuk baki dan kaedah awam untuk deposit dan pengeluaran.
  3. Tulis kelas Kenderaan dengan subkelas seperti Kereta dan Basikal yang menunjukkan polimorfisme.

Kesimpulan

OOP dalam JavaScript menyediakan cara yang berkesan untuk menulis kod yang bersih, modular dan boleh digunakan semula. Dengan menguasai konsep seperti kelas, warisan, enkapsulasi dan polimorfisme, anda akan dilengkapi dengan baik untuk membina aplikasi berskala. Teruskan bereksperimen dan gunakan konsep ini kepada masalah dunia sebenar untuk mengukuhkan pemahaman anda!

Topik Esok: Kami akan meneroka Pengaturcaraan Asynchronous dalam JavaScript, menyelam jauh ke dalam panggilan balik, janji dan async/menunggu. Nantikan!

Atas ialah kandungan terperinci Meneroka Pengaturcaraan Berorientasikan Objek (OOP) dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan