class Animal {
makeSound() {
console.log("Some generic animal sound");
}
}
class Dog extends Animal {
makeSound() {
console.log("Woof!");
}
}
class Cat extends Animal {
makeSound() {
console.log("Meow!");
}
}
function makeAnimalSound(animal) {
animal.makeSound();
}
const myDog = new Dog();
const myCat = new Cat();
makeAnimalSound(myDog); // 打印 "Woof!"
makeAnimalSound(myCat); // 打印 "Meow!"
在 JavaScript 中,多型(Polymorphism)主要是通過繼承和方法覆寫(Method Overriding)來實現的。
class Animal {
speak() {
console.log("Animal makes a sound")
}
}
class Dog extends Animal {
speak() {
console.log("Dog barks")
}
}
class Cat extends Animal {
speak() {
console.log("Cat meows")
}
}
const animals = [new Dog(), new Cat()]
animals.forEach(animal => {
animal.speak(); // 根據實際的子類型呼叫相應的方法
})
//Dog barks
//Cat meows
function makeAnimalsSpeak(animals) {
animals.forEach(animal => {
animal.speak()
});
}
const myAnimals = [new Dog(), new Cat(), new Animal()]
makeAnimalsSpeak(myAnimals)
//Dog barks
//Cat meows
//Animal makes a sound
在物件導向程式設計(OOP)中,「this」代表物件本身。
JavaScript 的特性是「所有事物都可以視為物件」,這會引發以下問題:
在不同的環境下,脫離物件的「this」值可能會有三種的表現:
window
物件。undefined
。重要的是,「this」的值取決於它的呼叫方式,而不是它在程式碼中的位置。
當this在當前作用域找不到時,就會一直往上尋找,直到找到合適的作用域。
為了解決「this」值不確定的問題,ES6 引入了箭頭函數(arrow function)。箭頭函數有以下特性: