C risiu s= 70, Fahrenhei t= 94 eUtus = 6 0 F a h re n h e it« 7
68 Chưdng 2: Học những điểm cơ bản vể JavaScript Sử d ụ n g c á c c ả i tiế n tro n g Jav aS crip t 2.0 đ ể tợo c á c hàm
m ợnh hơn
Ja v a S c rip t 2.0 m ang m ột số cải tiến cho ngơn ngữ. H iệp hội các n h à sản x uất m áy tín h châu Âu (ECMA) đã bổ sung m ột số tín h n ăn g nhằm tă n g sức m ạn h và sự lin h hoạt:
B Các class (lớp) B Các package (gĩi) B Các namespace
B Các Data type (kiểu dữ liệu)
R Các m ảng d ứ liệu (data a*ray) m ạnh bơr và ìinh hoạt bơn
B Các access control (điều khiển truy cập), chẳng hạn như public và private
Với chức n ă n g bổ sung này, bây giờ Jav a S c rip t cĩ th ể được sử dụng cho các tá c vụ m à trước đây địi hỏi một ngơn ngữ phức tạ p hơn như c+ + hoặc Ja v a , tro n g k h i v ẫ n giữ lại tín h đơn giản mà đã làm cho Jav a S c rip t r ấ t th ơ n g dụng với các n h à p h át triể n web trong những năm naỵ
Nếu b ạ n đã làm việc với Jav aS crip t trước đĩ, m ột tro n g những th ay đổi đầu tiê n m à b ạn sẽ chú ý là việc thêm các kiểu dữ liệu và ngơn ngữ. Các kiểu dữ liệu cho phép bạn giới h ạn các dãy giá trị và một biến cĩ th ể chứa hoặc m ột hàm cĩ th ể trả về. Chúng ta cĩ th ể chỉnh sửa hàm ađ_two( ) m à chúng ta đã định nghĩa trước đĩ trong chương này với cú pháp Ja v a S c rip t 2.0 sử dụng t ấ t cả dữ liệu cho t ấ t cả biến, th am số của nĩ, và chính hàm :
function ađ_two(x : Number, y : Number) : Number {
if (X > 7) { X = X - 7; } else { X = X + 7; } if (y > 18) { y = y -1 8 ; } else { y = y + 18; } return X + y; }
Chương 2: Học những điểm cơ bản về JavaScript 69
Sau khi chúng ta đã thêm kiểu dữ liệu N um ber vào các th a m số X và y, Jav a S c rip t sẽ báo cáo một lỗi nếu cị một giá trị nào đĩ ngoại trừ m ột số được chuyển. Những nhà p h át triể n khác cũng th ấ y rõ rà n g hơn những kiểu dữ liệu nào mà chúng ta mong đợi cho từ ng th a m sơ'.
Sử dụng các tham số tùy chọn được đặt tên
Mơt th a v đổi kháo đốì với nác cách tham số được sử dụng tro n g
Jav a S c rip t 2.0 là khả năng định nghĩa các th a m sơ' tùy chộn được đ ặ t tên . Từ khĩa nam ed cho phép chúng ta n h ậ n d ạng m ột số th a m sơ" là tùy chọn (optional) khi định nghĩa danh sách th am số của m ột hàm .
Ví dụ, chúng ta cĩ m ột hàm mong đợi tê n của m ột người được chuyển đến nĩ tro n g ba phần: function sayHello ( f ir s t : String, in itial: String, la s t : Strin g ): String { vai fullname; if (initial o ■") { initial = initial + }
fullname = iirst + " ■ + initial + last; rĩturn fúlmrre;
}
Nếu chung la định nghĩa liĩ sử dụng cú phâp trước, chúng ta khơng cĩ lựa chọn nào ngồi việc gọi nĩ bằng cách sau đây:
sayHello (“Scotr, ", ’Duffy“) ;
Nhưng b ằn g cách sử dụng modifíer n am ed trê n th a m sơ' m iđle in i tial, chúng ta cĩ th ể cho phép hàm được gọi khơng cĩ in itia l ở giữạ
function sayHello (firs t: String, la s t: String,
named initial: String = "“) : String { var fullname : String;
if (initial <> "") { initial = initial + }
70 Chương 2: Học những điểm cờ bản về JavaScriptfullname = first + "" + initial + last; fullname = first + "" + initial + last;
return fullname;
}
document.write (sayHello (“Scott“, "Duffy") + "<br>");
document.write (sayHello (“Bobby", "Jones", initial:"H") + "<br>");
B ằng việc định nghĩa th am số miđle in itial là n ền (được đ ặt tên ), chúng ta cĩ th ể gọi hàm sayHelloO với chỉ íĩrst nam e (tên) và la st n am e (họ) được xác định. Các th am số được đ ặt tên phải luơn xác định một in itializer phịng hờ m ột giá trị khơng được xác định cho th a m số đĩ, do đĩ m ột giá trị cĩ th ề được gán. Nếu bạn muốn cung cấp m ột giá tr ị cho một th am số được đ ậ t tên , bạn phải tham chiẽu đến th a m số đị theo tên.
Chấp nhận bất kỵ số tham sấ
Các hàm trong Jav a S c rip t 2.0 cĩ thể được định n g h ĩa sao cho chúng cĩ th ể chấp n h ậ n m ột số th am số khơng giới h ạn . B ạn muốn làm điều này khi hàm cần chấp n h ậ n một số lớn các th am số giống h ệ t như ng bạn khơng muấn tạo nhiều th a m số tùy chọn được đ ặ t tên.
Tham số cịn lại phải ln xuất hiện ở cuối b ất kỳ th a m số khơng được đ ặt tê n vổn được định n g h ĩa sử dụng ba dấu chấm (...). Các th a m sơ' được đ ặt tên, các th am số được định nghĩa sử dụng từ khĩa nam ed, vẫn cĩ th ể được liệt kê sau th am số cịn lạị Dĩ nhiên, chỉ cĩ th ể cĩ m ột tham số cịn lại trong m ột hàm .
Mã sau đây định nghĩa m ột hàm vốn cĩ th ể chấp n h ậ n m ột số th a m số khơng giới h ạn . Bốn đối số đầu tiên được chuyển sẽ được gán vào 4
th am sơ dầu tié n được đ in h nghía: đam e, a d d re ss, phoneN ürtf, và spouseNamẹ B ất kỳ đối số được chuyển qua bốn th a m số này sẽ được gán sang m ột m ảng (array) được gọi là childNam ẹ C húng ta cĩ th ể sử dụng một vịng lặp for-in để nhận được danh sách các tê n từ b iến đĩ. (Chương 4 sẽ trìn h bày chuyên sâu về các m ảng (array)).
function printform (name : string, ađress : string,
phoneNum : string, spouseName : string, ... childName : Array) {
// An unlimited number of children can be provided with (document) {
write ("Name:" + name + '<br>");
Chương 2: Học những điểm cơ bản về JavaScript 71
Write ("Ađress: ' + aadress + "<br>*‘);
Write ("Phone: " + phoneNum + "<br>");
for (Child in childName) {
Write ("Child " + childNameỊchild] + “<br>")¡
} }
return;
}
Trong chương tiếp theo, chúng ta sẽ tập tru n g vào một số tín h năng m ạnh n h ấ t của JavaScript - các đối tượng và hàm cài sẵn của nĩ.