Xây dựng class trong JavaScript

Một phần của tài liệu JS advanced (Trang 84 - 85)

thường tạo những đối tượng từ các lớp (class), trong đó các object được coi như là trường hợp cụ thể của một lớp. Cả hai ngôn ngữ Java và JavaScript đều cung...

Class và prototype

1- Xây dựng class trong JavaScript

Trong lập trình hướng đối tượng, chúng ta thường tạo những đối tượng từ các lớp (class), trong đó các object được coi như là trường hợp cụ thể của một lớp. Cả hai ngôn ngữ Java và JavaScript đều cung cấp cho chúng ta từ khóa new dùng để tạo một thể hiện của một đối tượng đã được định nghĩa trước đó.

Trong Java, mọi thứ đều là object, và được phát triển từ class nguyên thủy là java.lang.Object. Chắc hẳn nếu bạn là lập trình viên Java hẳn sẽ thấy câu lệnh sau khá quen thuộc:

[quote] MyObject myObj=new MyObject(arg1,arg2);[/quote] Với JavaScript cũng có cách khai báo rất giống như vậy: [quote] var myObj= new MyObject(arg1, arg2);[/quote]

Nhưng có một sự khác biệt lớn về bản chất đó là chúng ta hoàn toàn không định nghĩa lớp MyObject như trong Java mà thay vào đó là một hàm thật sự có cùng tên:

[quote] function MyObject(){ //do something here }

[/quote]

Để minh họa cho điều này, ta xét ví dụ sau khai báo một class Animal với các thuộc tính đơn giản như name, food và phương thức đơn giản là eat:

//Thuộc tính

this.name=name; //Tên con vật, hoặc tên loài this.food=food; //Loại thức ăn có thể ăn //Phương thức

this.eat=function(something){

if(something===food){ //Nếu thức ăn phù hợp alert('This is very delicious');

}else{

alert("I don't like this"); }

} }

var myAnimal = new Animal("Cat","Mouse"); myAnimal.eat("Mouse");// This is very delicious

Trong ví dụ trên, một lần nữa ta sử dụng từ khóa this, với cấu trúc trên thì ta có thể hiểu this là đối tượng được tạo ra sau từ khóa new.

Tất nhiên với cách khai báo như vậy mọi việc đều OK, nhưng nếu đi sâu hơn một chút chúng ta sẽ thấy: đầu tiên, cho mỗi thể hiện của class Animal mà chúng ta tạo ra, chúng ta cũng tạo ra một hàm eat() mới, điều này dẫn đến vấn đề về bộ nhớ và tốc độ xử lý nếu bạn có ý định tạo ra rất nhiều đối tượng trong chương trình từ class Animal (ví dụ tạo một đàn kiến chẳng hạn!!!); thứ nữa, khi làm việc với các DOM (Document Object Model), chúng ta sẽ gặp phải vô số vấn đề rắc rối không mong đợi. Chính vì vậy bây giờ ta hãy thử một cách khác an toàn hơn, và nó được biết đến cái tên khá lạ tai: prototype-base.

Một phần của tài liệu JS advanced (Trang 84 - 85)