c. Thẻ <NOScript> và </NOSCRIPT>
2.2.5.4 Tính hướng đối tượng trong JavaScript
Tính đối tượng trong JavaScript khác so với các ngôn ngữ lập trình hướng đối tượng khác. Nó được thể hiện bằng các mẫu, trong khi đó tính đối tượng trong Java lại được thể hiện bằng các lớp. Điểm khác biệt quan trọng thứ hai: JavaScript là một ngôn ngữ lập trình động, điều đấy có nghĩa là chúng ta có thể định nghĩa các lớp tại thời điểm biên dịch. Ngoài ra còn có một số điểm khác nhau cơ bản nữa. Bảng dưới đây sẽ liệt kê ra một số sự khác nhau đó.
Các đặc trưng Java JavaScript
Lớp ngôn ngữ Static Dynamic Định kiểu Định kiểu mạnh Định kiểu yếu Classes public class foo {} function foo() {} Constructors public class foo {
public foo() {} }
function foo() {}
Các phương thức
public class foo { public foo() {} public void Bar() {} }
function foo() { this.Bar = function() {}; }
Khởi tạo foo myFoo = new foo();
var myFoo = new foo();
Kế thừa public class foo extends bar {}
foo.prototype = new bar();
Có nhiều ý kiến khác nhau về tính đối tượng trong JavaScript, nhưng nhìn chung đều mong muốn tính đối tượng trong JavaScript hoạt động một cách hiệu quả, an toàn kiểu và mạnh mẽ hơn như các kỹ thuật hướng đối tượng khác: interface, abstract class.
- Public Member (Biến toàn cục)
Để có thể sử dụng được các thành phần của một đối tượng bên ngoài đối tượng đấy, cần phải chuyển thành phần đó thành kiểu dùng chung (public) và chỉ định nó thành đối tượng đặc biệt this. Khi sử dụng đối tượng this để truy cập các trường hay các phương thức trong một lớp thì cách sử dụng this trong JavaScript và Java là giống nhau. Trong cả JavaScript và Java, this có thể được xem như là một đối số vô hình được truyền vào một cấu trúc và sử dụng nó để chỉ đến đối tượng chứa cấu trúc hay phương thức đó. Do JavaScript là một ngôn ngữ động nên việc sử dụng this trong JavaScript có sự khác biệt so với Java. Điều này được thể hiện như sau: Đối với Java, đối tượng this chỉ được sử dụng để chỉ đến các trường mà đã được định nghĩa trong các lớp. trong khi đó trong JavaScript đối tượng this có thể được sử dụng để chỉ đến các trường, phương thức ảo của đối tượng. Sự khác biệt được thể hiện ở ví dụ sau:
function Customer() { // public properties
this.firstName = "John"; this.lastName = "Smith"; }
var john = new Customer(); function Customer() {} function createCustomer() {
var temp = new Customer();
temp.firstName = “John”; temp.lastName = “Smith”; return temp;
}
var john = createCustomer() - Private member (Biến cục bộ)
Biến cục bộ là biến chỉ có ý nghĩa trong một phạm vi nhỏ, như là trong một hàm, hay một đoạn lệnh. Để định nghĩa một biến là cục bộ, sử dụng từ khóa var.