Đây là ví dụ về cách sử dụng một hàm tạo khác bên trong một hàm nhà máy để trả về một đối tượng. Trong trường hợp này, other_constructor
là hàm hàm tạo, tạo đối tượng thuộc loại other_constructor
(lý tưởng trong thực tế điều này sẽ được viết hoa). Đối tượng đó được lưu trữ trong that
. Trong chức năng nhà máy này, method
là một hàm được xác định được thêm vào that
để mở rộng chức năng của đối tượng theo một cách nào đó.
Sự khác biệt giữa chức năng xây dựng và nhà máy là một chức năng nhà máy chỉ là một chức năng bình thường trả về một đối tượng, trong khi một hàm constructor có this
trỏ đến các đối tượng mới, và thường phải được gọi với từ khóa new
trước nó .
Một chức năng xây dựng điển hình:
function Dog(breed, height, name){
this.breed = breed;
this.animalType = "dog";
this.height = height;
this.name = name;
// calling `return` isn't necessary here
}
Và nó sử dụng:
var lab = new Dog("labrador", 100, "Sugar"); // `new` is necessary (usually)
console.log(lab.animalType); // prints out "dog"
console.log(lab.height); // prints out 100
Một chức năng nhà máy tiêu biểu:
function createDog(breed, height, name){
var dog = {
breed: breed,
height: height,
animalType: "dog",
name: name
};
return dog;
// `return` is necessary here, because `this` refers to the
// outer scope `this`, not the new object
}
Và sử dụng của nó:
var lab = createDog("labrador", 100, "Sugar"); // notice no need for `new`
console.log(lab.animalType); // prints out "dog"
console.log(lab.height); // prints out 100
Một lời giải thích tốt về sự khác biệt giữa họ và các trường hợp sử dụng khác nhau của mỗi là at Eric Elliot's blog
Cảm ơn, cái này có ý nghĩa với tôi. Tương tự như một hàm tạo lớp trong các ngôn ngữ hướng đối tượng –