2 dòng code JS sau thực hiện cùng 1 công việc:
Code:
var a = new Array(); var b = [];
Như đã biết, ta có thể truy nhập vào từng phần tử của mảng bởi []:
Code:
var a = ['first', 'second', 'third']; var v1 = a[0];
var v2 = a[1]; var v3 = a[2];
Ngoài chỉ số, ta còn có thể truy nhập vào từng thành phần của đối tượng bởi tên của chúng. VD dưới tạo một đối tượng rỗng, sau đó nó được đưa thêm các thành phần vào:
Code:
var obj = {}; //new, empty object
obj['member_1'] = 'this is the member value'; obj['flag_2'] = false;
obj['some_function'] = function(){ /* do something */};
VD trên thực hiện công việc giống hệt với VD dưới đây:
Code:
var obj = {
member_1:'this is the member value', flag_2: false,
some_function: function(){ /* do something */} };
Như vậy, khái niệm đối tượng và mảng kết hợp (hash) trong JS là không phân biệt. 2 dòng dưới đây thực hiện cùng 1 công việc:
Code:
obj.some_function(); obj['some_function']();
4. Lớp
Sức mạnh to lớn của ngôn ngữ lập trình hướng đối tượng có được nhờ việc sử dụng lớp. Tôi không nghĩ rằng có thể dựa vào kinh nghiệm với các ngôn ngữ lập trình khác mà đoán ra được cách thức 1 lớp được định nghĩa trong JS (bởi nó... quá khác - ND):
Code:
//defining a new class called Pet var Pet = function(petName, age){
this.name = petName; this.age = age; };
var famousDog = new Pet('Santa\'s Little Helper', 15); alert('This pet is called ' + famousDog.name);
Giờ hãy xem ta làm thế nào để thêm phương thức vào cho lớp Pet. Chúng ta sẽ sử dụng thuộc tính prototype mà mọi lớp trong JS đều có. Thuộc tính prototype là 1 đối tượng chứa tất cả các thành phần mà 1 đối tượng của lớp sẽ có. (Hay nôm na thuộc tính prototype chứa "nguyên mẫu" của 1 lớp, cho dễ hiểu - ND). Thậm chí các lớp mặc định của JS, như String, Number, Date,... đều có đối tượng prototype để ta có thể thêm vào đó các phương thức và thuộc tính giúp mọi đối tượng sinh ra từ lớp đó tự động có thêm các thành phần mới.