Chưdng 5: Tạo các class JavaScript riêng của bạn

Một phần của tài liệu Ebook hướng dẫn tự học ngôn ngữ lập trình javarscript phần 1 ths nguyễn nam thuận (Trang 136 - 140)

I 3J avaScript sam plecode M tciosofl nternet Explorer HË 3]

140 Chưdng 5: Tạo các class JavaScript riêng của bạn

Tổ chức các class sử dụng sự thừa kế

Một tro n g những lợi ích của việc tổ chức chương trìn h th à n h các class là bạn cĩ th ể th iế t lập những mối quan hệ giữa các class sử dụng sự thừa k ế (inheritance). Sự thừa k ế cho phép b ạn làm hai điều:

M Tiết kiệm tbờigian lập trình, bởi vì các class liên quan cĩ th ề chia sẻ

B Thi b à n h một tập hợp tbĩiộc tính và phương thức chting chuẩn cho các cỉass liên quan.

Jav a S c rip t 2.0 cho phép m ột class thừa k ế từ m ột class khác sử dụng từ khĩa extends.

dass ClassName sxíentís Parentciass ! stat3T¡er,ts¡ }

Điều này th iế t lập m ột mối quan hệ bố-con giữa các class P a re n tC la ss và ClassN am ẹ Cách tố t n h ấ t để hiểu sự thừ a k ế là h ây xem cấu trúc class như là m ột cây p h ân cấp.

ở đỉnh cây là d a s s Object, bố của t ấ t cả class tro n g hệ thống. T ấ t cả class trong hệ thống vốn khơng cĩ m ột đối tượng bố tường m inh dẫn xuất từ d a s s Object theo mặc định. Các class k h ơng cĩ m ột class bố tường m inh được định nghĩa, thừa k ế từ class đĩ th a y vào đĩ.

Tinh năng mởi tro n g Jav aS crip t 2.0

G 'ú cl’.ú: T ấ t Cc d a s s trong JavaScript 2.0 (cả do h ệ t h ố n g đ ị n h I i g l đ a v.ì do người d ù n g đ ị n h nghĩa) cĩ d a ss O b je c t là m ộ t tổ r iê n trực tiếp hoặc do người d ù n g đ ị n h nghĩa) cĩ d a ss O b je c t là m ộ t tổ r iê n trực tiếp hoặc g ián tiếp, t h ậ m c h í các class mỏ rơ n g từ m ột class k h á c.

Chúng* ta th ể định nghĩa í'lesr bố th ec cách tb ơ n g th ư ^ rg

class Vehicle { var Maker; var Price; var Color;

function Vehicle (maker, price, color) { this.Maker = maker;

this.Price = price; this.Color = color;

}

function Vehicle o {

this. Maker = “Default”; this.Price = 0.0;

} }

Mã này định n g h ĩa một class Vehiclo, mậc dù chỉ cĩ ba thuộc tính. C lass này tượng trư ng cho bất kỳ phương tiện di chuyển chung chung cho dù nĩ là m ột chiếc thuyền hoặc một máy bay hoặc m ột xe hơị Class đĩ cĩ th ể xử lý b ấ t kỳ đối tượng mà cĩ th ể được xem là m ột phương tiện vận chuyển.

• • • • • • •

Thủ thuật

Một class cĩ thể chứa nhiều constructor, miễn là sơ" và loại tham sơ" (được gọi là chữ ký hàm) là duy nhât cho mỗi constructor.

Sau đĩ chúng ia cĩ th ể cụ the hơn inột chút hàng việc đinh nghĩa các clasp p h ân tích loại phương ciẻn vận chuyến. Bằng việc mơ rộng class Vehicle, các class con tự động thừa kế thuộc tín h và phương thức của class Vehiclẹ

cliS'i l.andV’ehic'e áxt.erds Veh'Cle {

// Land specific code var Speed;

var xPosition; var yPosition;

%I I

class WaterVehicie extends Vehicle { // JVdter bptciiic code

var Speed: var WatẻDisplaceíient, var xPosition, var ’/Position; var zPosition; )

class AirVehicle extends Vehicie ( // Air specific code

var AirSpeed, var LandSpeed; var xPosition; var yPosition; var zPosition; }

142 Chưdng 5: Tạo các class JavaScript riêng của bạnclass SpaceVehicle extends Vehicle { class SpaceVehicle extends Vehicle {

// Space specific code var Thrust;

var DistanceFromEarth;

}

Chúng ta cĩ th ể tiếp tục định nghĩa các class th ừ a k ế từ các class con (LandVehicle, AirVehicle, W aterV ehicle, và SpaceVehicle). Cái ý

ở đây là mỗi class con là m ột phiên b ản riêng b iệ t hơn của class bố. Do

đĩ LandV ehicle sẽ cĩ những class con sau đây:

B Car tf Train B Bus M Truck

Điều bạn cẩn biết?

Câu c h u y ệ n v ề các giao d iện

ECM A, các nhà thiết kế ra thơng số kỹ thuật JavaScript 2.0, ban đầu đã dự định đưa vào một khái niệm lập trình một đối tượng được gọi là các inter­ face (giao diện) trong thơng số kỹ thuật, nhưng nĩ đã bị loại bỏ vào giây phút cuốị Các giao diện cho phép bạn định nghía một tập hợp các tên phương thức chuẩn và các danh sách tham số mà khơng cần phải cung cấp mã oho chúng. Sau đĩ một class cĩ thể khai báo ■' support the follow­ ing i n t e r f a c e s . điếu này đưa ra mộ4 cách đáng t:n cậy để biết r-hữrg phương thức này được hỗ trợ bởi class.

Ví dụ bạn định nghĩa một giao diện cĩ tên là DoorLock, chứa hai phương thức Lock() và Unlock(). Chủng ta biết rằng một class Car thực thi giao diện DoorLock, do đĩ chúng ta cĩ thể chắc chắn rằng một đối tượng Cnr cũng cĩ các phương thức Lock() và Unlock(). Chú ý rằng một Car cĩ phải là một loại DoorLock, do đĩ một mối quan hệ bố - con (một mối quan hệ được tạo bởi sự thừa kế) khơng nên được thiết lập.

Bằng việc định nghĩa một giao diện DoorLock, chúng ta đã tạo một tập hợp phương thức chuẩn cho các class vốn cần định nghĩa hoạt động khĩa cửa (door lock) chẳng hạn như class Car và class Housẹ

Một C ar là m ột loại LanđVehicle cụ th ể hơn, vốn là m ột loại Ve­ hicle cụ th ể hơn. Nếu chúng ta muốn định nghĩa th êm C ar chẳng hạn, chúng ta cĩ th ể tạo các class SUV và Sports C ar th ừ a k ế từ nĩ...

Chưrtng 5: Tao các cỉsf Jiv a S c rp * ri«pg rủa hạn

Rõ rà n g cĩ hai lợi ích chính của việc làm cho các class thừ a k ế theo m ột cách như vậỵ Đầu tiên là khả náng tái sử dụng mã. C húng ta đã định nghĩa m ột tậ p hợp constructor h ết trở lại tro n g class Vehiclẹ

function Vehicle (maker, price, color) { this.Maker = maker;

this Price = price; this.Color = color;

}

Giả sử các class con đã khơng định nghĩa m ột constructor cho chính nĩ, t ấ t cả con cháu của class Vehicle cĩ th ể sử dụng constructor Vehicle gốc.

class Vehicle ( var Maker; var Price; var Color;

function Vehicle (maker, price, color) I this.Maker = maker;

this.Price = price; this.Color = color;

} }

cidSá LaiidVeliic.e dx^efids Vdh.clt { // Land specific code

var Speed; var xPosition, var yPosition;

}

class Car extends LandVehicle ( // Car specific code

var Model; var Year;

}

// Car inherits the Vehicle constructor

var m yCar: Car = new Car (“Ford", 19500, “Blue”): myCar.Model = "Focus”;

144 Chướng 5: Tạo các class JavaScript riêng của bạnmyCar.Speed = 32; myCar.Speed = 32;

// Car inherits the properties of Vehicle

document.write (“Vehicle class properties: " + myCar.Maker + "<br>” ); // Car inherits the properties of LandVehicle

document.write (“LandVehicle class properties: “ + myCar.Speed + “<br>"); // Car has its own properties as well

document.write (“Car class properties: “ + myCar.Model + “<br>”);

N hư bạn cĩ th ể th ấy từ hình 5.1, mặc dù bản th â n class C ar chỉ cĩ hai thuộc tín h , nhưng nĩ thừa k ế tấ t cả thuộc tín h từ bố của nĩ.

Một lợi ích khác của v;.ệc sử dụng sự th ừ a k ế là những gì m à các chuyên gia m áy tín h gọi là polym orphism (sự biến h ìn h ), v ề cơ bản, m ột biến được định nghĩa là kiểu dữ liệu Vehicle cĩ th ể chứa b ấ t kỳ đối tượng được dẫn xuất từ Vehicle (như LandV ehicle hoặc Car). Điều nàv cho phép m ột chương trìn h tác động lên m ột đối tượng m à khơng cần phải biết hoặc quan tâm chính xác loại đối tượng là gì. Nếu nĩ cĩ th ể tác động lên đối tượng bố, những h à n h động y n h ư t h ế cĩ th ể được thực hiện trê n b ấ t kỳ đối tượng con.

' 3 J a v a S c i i p t s a m p l e c o d e - M tc i o f o l t I n t e r n e t E x p to ic i Ị ' F ỵa £ d l ew F flv o rtet l o o k tíe fc

đ: S top R e fte th Home s««ch â fd v o rite t -il M ecta History¿

Một phần của tài liệu Ebook hướng dẫn tự học ngôn ngữ lập trình javarscript phần 1 ths nguyễn nam thuận (Trang 136 - 140)

Tải bản đầy đủ (PDF)

(163 trang)