hn4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com
Full version available at http://4u.jcisio.com/r/article609.htm

Hải Nam

Những đối tượng bí mật

Các biến đơn và các kiểu nguyên thuỷ như Number và String đã rất dễ sử dụng. Tại sao phải làm cho vấn đề trở nên rắc rối với Objects? Lí do rất thuyết phục: đối tượng thống trị thế giới (Objects rule the world). Dưới đây là một minh hoạ khá rõ:

Mã lệnh (Javascript)
var data1 = new Number("5");
var data2 = new String("Anything");
var data3 = data2.substring(1, 4) + data2.charAt(7);   // data3 = nythg (!)

var data4 = new Function("a, b", "return (a<b) ? a : b;");  // trả về trị nhỏ hơn
data4(3, 5);

var data = new Array(2);
data.0 = "red";            // giống như data[0]
data.1 = "blue";            // giống như data[1]

var data5 = new Object;
data5["shape"] = "square";      // giống như data5.shape
data5["old cost"] = 10.95;      // giống như data5.old cost (nhưng mà sẽ có lỗi)

var data6 = Math.round(3.45);      // bằng 3
var data7 = Date(1997, 7, 27);     // một ngày trong năm
var data8 = new Image();         // chỉ dùng ở trình duyệt

Trước tiên, các kiểu nguyên thuỷ quen thuộc có thể dùng như đối tượng

Mã lệnh (Javascript)
var data1 = new Number("5");
var data2 = new String("Anything");

Với kiểu Number, điều này gần như vô ích. Nhưng mà các giá trị String thì khá thú vị. Ở một mặt, String là một đoạn văn bản nhỏ được bao bởi dấu nháy - không thể thay đổi. Mặt khác, nó là một đối tượng phức tạp với một đống phương thức cho phép bạn tìm kiếm, chuyển đổi, phân tách và mặt khác cũng kích thích bạn làm một số cách hữu ích như ở dòng 3.JavaScript tự động chuyển kiểu Strings thành các đối tượng String, do đó nó hầu như vô hình đối với người viết.

Thừ nhì, hàm là đối tượng

Mã lệnh (Javascript)
var data4 = new Function("a, b", "return (a<b) ? a : b;");  // trả về trị nhỏ hơn
data4(3, 5);

Điều này chỉ có ích với những người cao cấp, nhưng nếu bạn cũng thử liều lĩnh tạo một hàm không có tên, dòng 5 sẽ chỉ cách cho bạn.

Thứ ba, mảng (Array) cũng là đối tượng

Mã lệnh (Javascript)
var data = new Array(2);
data.0 = "red";            // giống như data[0]
data.1 = "blue";            // giống như data[1]

var data5 = new Object;
data5["shape"] = "square";      // giống như data5.shape
data5["old cost"] = 10.95;      // giống như data5.old cost (nhưng mà sẽ có lỗi)

Cú pháp quen thuộc của các phần tử trong mảng có thể hoán đổi với cú pháp của các thuộc tính trong đối tượng. Mảng là đối tượng, chỉ khác một điều là thuộc tính length của mảng tồn tại và được cập nhật tự động bởi JavaScript (đối tượng thì không).

Tương tự, đối tượng là mảng. Cú pháp của mảng để lấy các phần tử có thể dùng để lấy các thuộc tính của đối tượng, ngoại trừ là do các tên thuộc tính không phải là số, một chuỗi được dùng trong ngoặc vuông. Việc này rất thuận tiện nếu tên thuộc tính có khoảng trắng, hoặc là thậm chí bạn không biết tên của thuộc tính vào lúc đó.

Đối tượng và Mảng có thể hoán đổi cho nhau. Bạn có thể thêm một thuộc tính vào mảng, hay thêm một phần tử vào đối tượng, theo cách vẫn thường làm.

Tuy nhiên, bạn chỉ lấy thuộc tính length của một mảng hực sự, và nó không đếm các thuộc tính không-phần-tử (non-element properties)

Thứ tư, có một số đối tượng khá hữu dụng

Mã lệnh (Javascript)
var data6 = Math.round(3.45);      // bằng 3
var data7 = Date(1997, 7, 27);     // một ngày trong năm
var data8 = new Image();         // chỉ dùng ở trình duyệt

Thí dụ trên minh hoạ các đối tượng kiểu Math và Date. Đây là 2 thuộc tính tự nhiên (native type) của JavaScript chưa được đề cập đến. Cả hai đều có các phương thức để thực hiện (thật ngạc nhiên) các phép tính về toán và ngày-giờ. Math cũng là một thí dụ hiếm gặp của một đối tượng sẵn có (built-in object). Đối tượng sẵn có không bao giờ cần phải tạo bằng new trước khi dùng, nó luôn tồn tại cho bạn dùng.

Thứ năm, đối tượng là các chung nhất để truy cập các tính năng chủ, như dòng cuối của thí dụ trên

Nearly all of the interesting bits of a Web browser look like JavaScript Objects. So Objects it is. Since this nearly brings the discussion of JavaScript native language features to a close, only the word Object appearing with its self-important initial capital letter will stand in future for the plain, native JavaScript type. A type does not describe a piece of data, a type describes a variety of data. The more humble word 'object' will be used to cover any bit of data that operates roughly like an Object, having methods properties, and so on. This is also applies to Arrays/arrays.

Finally, the biggest secret of Objects is that there's always one around you. A given script might look like it just contains plain variables, but these variables are really properties of some object. In ECMAScript, this is the magic global object that you can't see or touch. In browser-hosted JavaScript, each window is an object that contains as properties any variables you care to make up. Every variable is a property of some objectit's just a matter of finding it.


hainam4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com