< p >JavaScript是一門現代編程語言,它支持類和對象的面向對象編程范例。在JavaScript中,派生類是一種特殊的類,它從一個基類派生而來,并可以添加自己的屬性和方法。下面將介紹JavaScript中的派生類,以及如何使用它們創建更高效的代碼。< /p >< p >一般來說,派生類是通過使用關鍵字“extends”來定義的。它繼承了基類的內部屬性和方法,并通過添加新的屬性和方法來擴展其功能。例如,下面是一個基本的JavaScript類和它的一個派生類的示例:< /p >< pre >class Shape {
constructor(x, y) {
this.x = x;
this.y = y;
}
move(dx, dy) {
this.x += dx;
this.y += dy;
}
}
class Circle extends Shape {
constructor(x, y, r) {
super(x, y);
this.r = r;
}
area() {
return Math.PI * this.r * this.r;
}
}< /pre>< p >在上面的例子中,Shape類是一個基本的形狀類,它有一個名為move的方法來移動形狀。Circle類是從Shape類中派生而來的一個特殊的圓形類。它添加了一個名為area的方法來計算圓形的面積,并使用關鍵字“super”來調用父類(即Shape類)的構造函數,以初始化x和y的值。< /p >< p >另一個派生類的示例是,假設我們有一個基本的動物類,它有一些公共屬性和方法。然后,我們可以創建一些特定的動物類并從基類中繼承這些公共屬性和方法。例如,我們可以創建一些派生類,例如Dog類、Cat類和Bird類,它們共享基類中的公共屬性和方法。下面是一個帶有派生類的動物類的示例:< /p >< pre >class Animal {
constructor(name) {
this.name = name;
}
sayName() {
console.log(this.name);
}
doTrick(trick) {
console.log(this.name + " does " + trick);
}
}
class Dog extends Animal {
constructor(name) {
super(name);
}
doTrick(trick) {
console.log(this.name + " rolls over");
}
}
class Cat extends Animal {
constructor(name) {
super(name);
}
doTrick(trick) {
console.log(this.name + " meows loudly");
}
}
class Bird extends Animal {
constructor(name) {
super(name);
}
doTrick(trick) {
console.log(this.name + " sings");
}
}< /pre>< p >在上面的例子中,Animal是一個基礎類,它有一個名為sayName的方法,該方法會將動物的名稱打印到控制臺上,并且它有一個名為doTrick的方法,該方法會在控制臺上打印一個特定的技巧。然后,我們定義了一些派生類,例如Dog、Cat和Bird,它們從基類中繼承了共同的屬性和方法,并且通過添加自己的特定特征來擴展它們的功能。例如,Dog類具有特定的技巧來滾動,而Cat類則具有特定的技巧來大聲喵叫。< /p >< p >在上述例子中使用 extends 關鍵字聲明了一個新類,然后使用 super() 來調用父類的構造函數。ES6 中的派生類語法不是 JavaScript 的新特性 - 它是針對新語法的修改 - 所以可以使用 Babel 等工具將 ES6 編譯回 ES5 代碼,因此它將具有與 ES5 相同的功能。如下所示的 ES5 代碼:< /p >< pre >function Shape(x, y) {
this.x = x;
this.y = y;
}
Shape.prototype.move = function(dx, dy) {
this.x += dx;
this.y += dy;
}
function Circle(x, y, r) {
Shape.call(this, x, y);
this.r = r;
}
Circle.prototype = Object.create(Shape.prototype);
Circle.prototype.constructor = Circle;
Circle.prototype.area = function() {
return Math.PI * this.r * this.r;
}< /pre>< p >在上述例子的 ES5 代碼中,我們使用傳統的“函數和原型”的方式來定義類和派生類。在Circle的構造函數中,我們通過調用Shape的構造函數來初始化它的x和y的值,并通過Circle的原型對象添加名為area的方法。注意,我們還在Circle的原型上創建了一個新對象,并將它的原型設置為Shape的原型。這樣,Circle的實例就可以訪問Shape原型上的屬性和方法了。< /p >< p >總之,JavaScript中的派生類是一種非常有用的編程工具,它允許我們創建更高效、更復雜的代碼。通過使用繼承關系,我們可以從一個基礎類中繼承共同的屬性和方法,并在派生類中添加自己的特殊行為。通過深入了解JavaScript中的派生類,我們可以編寫更具有擴展性和可維護性的代碼。< /p >
上一篇css圖片比字體高
下一篇php mysql 接口