Trình tạo đối tượng JavaScript
Thí dụ
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
Nó được coi là thực hành tốt để đặt tên cho các hàm khởi tạo bằng chữ cái đầu tiên viết hoa.
Các loại đối tượng (Bản thiết kế) (Lớp)
Các ví dụ từ các chương trước là hạn chế. Họ chỉ tạo các đối tượng đơn lẻ.
Đôi khi chúng ta cần một " bản thiết kế " để tạo ra nhiều đối tượng cùng một "kiểu".
Cách để tạo một "kiểu đối tượng", là sử dụng một hàm tạo đối tượng .
Trong ví dụ trên, function Person()
là một hàm tạo đối tượng.
Các đối tượng cùng kiểu được tạo bằng cách gọi hàm khởi tạo với new
từ khóa:
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
Từ khóa này
Trong JavaScript, thứ được gọi this
là đối tượng "sở hữu" mã.
Giá trị của this
, khi được sử dụng trong một đối tượng, là chính đối tượng đó.
Trong một hàm tạo this
không có giá trị. Nó là một thay thế cho đối tượng mới. Giá trị của this
sẽ trở thành đối tượng mới khi một đối tượng mới được tạo.
Lưu ý rằng đó this
không phải là một biến. Nó là một từ khóa. Bạn không thể thay đổi giá trị của this
.
Thêm một thuộc tính vào một đối tượng
Thêm một thuộc tính mới vào một đối tượng hiện có thật dễ dàng:
Thí dụ
myFather.nationality = "English";
Thuộc tính sẽ được thêm vào myFather. Không phải với Mẹ của tôi. (Không phải đối tượng người khác).
Thêm một phương thức vào một đối tượng
Thêm một phương thức mới vào một đối tượng hiện có thật dễ dàng:
Thí dụ
myFather.name = function () {
return this.firstName + " " + this.lastName;
};
Phương thức này sẽ được thêm vào myFather. Không phải với Mẹ của tôi. (Không phải đối tượng người khác).
Thêm thuộc tính vào hàm tạo
Bạn không thể thêm thuộc tính mới vào phương thức khởi tạo đối tượng giống như cách bạn thêm thuộc tính mới vào đối tượng hiện có:
Thí dụ
Person.nationality = "English";
Để thêm một thuộc tính mới vào một hàm tạo, bạn phải thêm nó vào hàm tạo:
Thí dụ
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
Bằng cách này, các thuộc tính đối tượng có thể có các giá trị mặc định.
Thêm một phương thức vào một hàm tạo
Hàm khởi tạo của bạn cũng có thể xác định các phương thức:
Thí dụ
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.name = function() {
return this.firstName + " " + this.lastName;
};
}
Bạn không thể thêm một phương thức mới vào một phương thức khởi tạo đối tượng giống như cách bạn thêm một phương thức mới vào một đối tượng hiện có.
Việc thêm các phương thức vào một phương thức khởi tạo đối tượng phải được thực hiện bên trong hàm khởi tạo:
Thí dụ
function Person(firstName, lastName, age, eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
};
}
Hàm changeName () gán giá trị của tên cho thuộc tính lastName của người đó.
Bây giờ bạn có thể thử:
myMother.changeName("Doe");
JavaScript biết bạn đang nói về người nào bằng cách "thay thế" điều này bằng myMother .
Trình tạo JavaScript tích hợp
JavaScript có các hàm tạo dựng sẵn cho các đối tượng gốc:
new String() // A new String object
new Number() // A new Number object
new Boolean() // A new Boolean object
new Object() // A new Object object
new Array() // A new Array object
new RegExp() // A new RegExp object
new Function() // A new Function object
new Date() // A new Date object
Đối Math()
tượng không có trong danh sách. Math
là một đối tượng toàn cục. Từ new
khóa không thể được sử dụng trên
Math
.
Bạn có biết không?
Như bạn có thể thấy ở trên, JavaScript có các phiên bản đối tượng của kiểu dữ liệu nguyên thủy String
, Number
và Boolean
. Nhưng không có lý do gì để tạo ra các đối tượng phức tạp. Giá trị ban đầu nhanh hơn nhiều:
Sử dụng các ký tự chuỗi ""
thay vì new String()
.
Sử dụng các ký tự số 50
thay vì new Number()
.
Sử dụng các ký tự boolean true / false
thay vì new Boolean()
.
Sử dụng các ký tự đối tượng {}
thay vì new Object()
.
Sử dụng các ký tự mảng []
thay vì new Array()
.
Sử dụng các ký tự mẫu /()/
thay vì new RegExp()
.
Sử dụng biểu thức hàm () {}
thay vì new Function()
.
Thí dụ
let x1 = ""; // new primitive string
let x2 = 0; // new primitive number
let x3 = false; // new primitive boolean
const x4 = {}; // new Object object
const x5 = []; // new Array object
const x6 = /()/ // new RegExp object
const x7 = function(){}; // new function
Đối tượng chuỗi
Thông thường, các chuỗi được tạo dưới dạng nguyên thủy: firstName = "John"
Nhưng các chuỗi cũng có thể được tạo dưới dạng các đối tượng bằng cách sử dụng new
từ khóa:
firstName = new String("John")
Tìm hiểu lý do tại sao không nên tạo chuỗi dưới dạng đối tượng trong chương Chuỗi JS .
Đối tượng số
Thông thường, các số được tạo dưới dạng nguyên thủy: x = 30
Nhưng số cũng có thể được tạo dưới dạng các đối tượng bằng cách sử dụng new
từ khóa:
x = new
Number(30)
Tìm hiểu lý do tại sao không nên tạo số dưới dạng đối tượng trong chương JS Numbers .
Đối tượng Boolean
Thông thường, các boolean được tạo dưới dạng nguyên thủy: x =
false
Nhưng boolean cũng có thể được tạo dưới dạng các đối tượng bằng cách sử dụng new
từ khóa:
x = new Boolean(false)
Tìm hiểu lý do tại sao không nên tạo boolean dưới dạng đối tượng trong chương JS Booleans .