色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javascript 多態

張明哲1年前7瀏覽0評論

JavaScript是一門面向對象的編程語言,支持多態。多態是一種概念,可以讓不同的對象以不同的方式對消息進行響應。在JavaScript中,多態可以通過重載方法和通過對象上的屬性或方法進行實現。

例如,我們可以創建一個基本的形狀類來表示不同的形狀,并在其基礎上創建不同的形狀子類,如圓形、矩形和三角形。每個形狀子類都可以具有特定的屬性和方法,如計算面積和周長。然后,我們可以定義一個函數,該函數可以接受任何形狀的對象,并根據對象的類型執行不同的操作。

class Shape {
constructor() {
this.type = 'shape';
}
getArea() {
return 0;
}
}
class Circle extends Shape {
constructor(radius) {
super();
this.type = 'circle';
this.radius = radius;
}
getArea() {
return Math.PI * Math.pow(this.radius, 2);
}
}
class Rectangle extends Shape {
constructor(width, height) {
super();
this.type = 'rectangle';
this.width = width;
this.height = height;
}
getArea() {
return this.width * this.height;
}
}
class Triangle extends Shape {
constructor(base, height) {
super();
this.type = 'triangle';
this.base = base;
this.height = height;
}
getArea() {
return (this.base * this.height) / 2;
}
}
function calculateShapeArea(shape) {
if (shape instanceof Shape) {
console.log(`${shape.type} area is ${shape.getArea()}`);
} else {
console.log('Invalid shape');
}
}
const circle = new Circle(5);
const rectangle = new Rectangle(3, 4);
const triangle = new Triangle(4, 5);
calculateShapeArea(circle); // circle area is 78.53981633974483
calculateShapeArea(rectangle); // rectangle area is 12
calculateShapeArea(triangle); // triangle area is 10
calculateShapeArea('invalid'); // Invalid shape

在上面的例子中,我們可以看到多態的使用。在calculateShapeArea函數中,我們接受任何形狀的對象作為參數,并使用Shape類作為類型檢查。這意味著我們可以傳遞任何類型的形狀對象,包括Circle、Rectangle和Triangle。由于每個子類都覆蓋了基本的Shape類方法getArea,因此在執行calculateShapeArea時,我們可以根據對象的類型執行不同的操作。

除了使用對象的方法重載來實現多態性之外,JavaScript還通過使用對象上的屬性或方法來實現多態性。例如,我們可以定義一個通用的函數,該函數將使用對象上特定的屬性或方法,而不是對象本身來執行操作。

function print(x) {
console.log(x.toString());
}
print(10); // '10'
print('Hello'); // 'Hello'
print([1, 2, 3]); // '1,2,3'

在上面的例子中,print函數接受任何類型的參數,并使用toString方法打印它。由于大多數JavaScript對象都有一個toString方法,因此我們可以安全地傳遞任何類型的對象,并在不同的上下文中處理它們。

綜上所述,多態是一種強大的面向對象編程概念,使代碼更具靈活性和可復用性。在JavaScript中,我們可以使用方法重載和對象上的屬性或方法來實現多態性,以便更好地處理不同類型的對象和數據。