Từ khóa new
trong JavaScript được sử dụng để tạo ra một đối tượng mới từ một hàm khởi tạo (constructor function). Khi sử dụng new
, một loạt các bước cụ thể được thực hiện để khởi tạo đối tượng và liên kết nó với prototype của constructor. Đây là một phần quan trọng trong cách hoạt động của lập trình hướng đối tượng (OOP) trong JavaScript.
new
thực hiện các bước sau:[[Prototype]]
của đối tượng mới.this
trỏ tới đối tượng mới:
this
bên trong hàm sẽ tham chiếu đến đối tượng mới. Điều này cho phép hàm khởi tạo gán các thuộc tính và phương thức cho đối tượng.const obj = new ConstructorFunction();
new
với hàm khởi tạo (constructor function):function Person(name, age) { // `this` tham chiếu đến đối tượng mới this.name = name; this.age = age; // Phương thức this.sayHello = function() { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); }; } // Tạo đối tượng mới bằng từ khóa `new` const person1 = new Person("Alice", 25); person1.sayHello(); // "Hello, my name is Alice and I am 25 years old."
Trong ví dụ trên:
Person
là hàm khởi tạo (constructor function).new Person("Alice", 25)
được gọi, một đối tượng mới được tạo, với this
trong hàm khởi tạo trỏ đến đối tượng này.name
và age
được gán cho đối tượng mới và phương thức sayHello
cũng được gán.function Animal(type) { this.type = type; } // Thêm phương thức vào prototype của hàm khởi tạo Animal.prototype.getType = function() { return this.type; }; const dog = new Animal("Dog"); console.log(dog.getType()); // "Dog"
Trong ví dụ này, từ khóa new
giúp đối tượng dog
kế thừa các phương thức từ prototype của Animal
. Phương thức getType
được chia sẻ giữa tất cả các đối tượng được tạo ra từ hàm khởi tạo Animal
, giúp tối ưu hóa bộ nhớ.
function Test() { this.value = 42; return 100; // Giá trị trả về này sẽ bị bỏ qua } const test = new Test(); console.log(test.value); // 42
Trong trường hợp này, mặc dù hàm Test
trả về giá trị nguyên thủy 100
, đối tượng mới được tạo từ new Test()
vẫn được trả về.
function AnotherTest() { this.value = 42; return { a: 1, b: 2 }; // Trả về một đối tượng khác } const anotherTest = new AnotherTest(); console.log(anotherTest); // { a: 1, b: 2 }
Trong ví dụ này, vì hàm khởi tạo trả về một đối tượng (không phải nguyên thủy), đối tượng được trả về sẽ là { a: 1, b: 2 }
, thay vì đối tượng mới với thuộc tính value
.
new
có vai trò gì trong lập trình hướng đối tượng?Trong JavaScript, từ khóa new
đóng vai trò quan trọng trong việc triển khai lập trình hướng đối tượng (OOP):
new
giúp dễ dàng xây dựng các hệ thống với nhiều đối tượng có cùng đặc điểm hoặc phương thức, đồng thời tối ưu hóa hiệu suất bằng cách không tạo lại các phương thức cho từng đối tượng riêng lẻ.new
được sử dụng để khởi tạo các đối tượng mới từ constructor function.this
và trả về đối tượng mới.new
đóng vai trò quan trọng trong lập trình hướng đối tượng, giúp quản lý các đối tượng và phương thức một cách hiệu quả.