Class và prototypeTrong 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.Trong javascript bạn có thể định nghĩa các thuộc tính và phương thức sau khi nó được khởi tạo.Ví dụ:
var oCar = new Object;oCar.color = “red”;oCar.doors = 4;oCar.mpg = 23;oCar.showColor = function () {alert(this.color);};
Nhưng đoạn mã trên chỉ cho việc bạn khởi tạo 1 đối tượng bất kỳ, không cụ thể là 1 phương thức khởi tạo của 1 đối tượng nào đó.Phương thức khởi tạoTrong javascript, tên hàm khởi tạo cũng chính là tên lớp. Nó bắt đầu bằng 1 ký tự hoa.
function Car(sColor, iDoors, iMpg) {this.color = sColor;this.doors = iDoors;this.mpg = iMpg;this.showColor = function () {alert(this.color)};}var oCar1 = new Car(“red”, 4, 23);var oCar2 = new Car(“blue”, 3, 25);
Mẫu prototypeMẫu prototype cho phép bạn định nghĩa thêm phương thức khởi tạo của 1 class sau khi phương thức khởi tạo đã được định nghĩa.
function Car() {}Car.prototype.color = “red”;Car.prototype.doors = 4;Car.prototype.mpg = 23;Car.prototype.showColor = function () {alert(this.color);};var oCar1 = new Car();var oCar2 = new Car();
Private & publicHầu hết các ngôn ngữ lập trình hướng đối tượng quen thuộc như Java hay C# đều hỗ trợ từ khóa public và private cho các thuộc tính cũng như phương thức trong class. Với JavaScript chúng ta cũng có thể tạo ra các pattern để giả lập hai từ khóa này trong các class (cũng giả lập luôn!!):Private variables: những biến được khai báo với từ khóa var bên trong object, chỉ có thể được truy nhập bởi các hàm riêng (private functions) hoặc các phương thức đặc quyền(privileged methods) của object.Private functions: những hàm được khai báo kiểu inline hoặc khai báo kiểu var functionName=function(){…} và được truy cập bởi các phương thức đặc quyền bên trong object.Privileged methods: những hàm được khai báo kiểu this.methodName=function(){…} bên trong object. Những hàm này có thể được gọi bên ngoài tới object.Public property: là những thuộc tính được khai báo kiểu this.propertyName, những thuộc tính này có thể thay đổi từ bên ngoài của object.Public method: là những phương thức được khai báo kiểu ClassName.prototype.methodName=function(){…}, những phương thức này có thể được gọi từ bên ngoài object.Static property: những thuộc tính được khai báo kiểu ClassName.propertyName=someValue.Prototype property: những thuộc tính được khai báo kiểu ClassName.prototype.propertyName=someValue.Hoặc chúng ta có thể xây đựng một cách đơn giản theo các Pattern dưới đây:
//Public:function Constructor(...) { this.membername = value;}Constructor.prototype.membername = value; //Private:function Constructor(...) {var that = this;var membername = value;function membername(...) {...}}
//chú ýfunction membername(…) {…}//có thể thay thế chovar membername = function membername(…) {…};//Privilegedfunction Constructor(…) {this.membername = function (…) {…};}
« Remedial JavaScript OOP trong Javascript (Phần 2) – inheritance ( Kế thừa) »
