Khái niệm new C(arg1, arg2)
:
Giả sử C là một hàm JavaScript (nếu không bạn nhận được một lỗi):
- Tạo một đối tượng rỗng mới (không có tài sản)
- Thiết lập nguyên mẫu của các mới đối tượng với giá trị của thuộc tính "
prototype
" của C
.
- Lưu ý: Giá trị mặc định của
prototype
cho một chức năng là một đối tượng (tự động tạo ra khi hàm được công bố) với nguyên mẫu của nó thiết lập để Object.prototype
và constructor
tài sản chỉ trở lại chức năng C
.
- Lưu ý: Thuật ngữ có thể gây nhầm lẫn. Thuộc tính có tên là "nguyên mẫu" là không phải là giống như nguyên mẫu của đối tượng. Chỉ các hàm có thuộc tính có tên là "nguyên mẫu", nhưng tất cả các đối tượng đều có một mẫu thử nghiệm.
- Gọi hàm
C
với 'this
' được đặt thành đối tượng mới và với đối số được cung cấp.
- Nếu gọi hàm
C
trả về một đối tượng, đối tượng này là kết quả của biểu thức. Nếu không, đối tượng mới được tạo là kết quả của biểu thức.
Phương án thay thế cho new
trong ECMAScript 5 sẽ sử dụng phương pháp được dựng sẵn Object.createObject
.
new C(arg1, arg2)
sẽ tương đương với:
var obj = Object.createObject(C.prototype);
C.apply(obj, [arg1, arg2]);
Chuẩn JavaScript không cho phép bạn thiết lập một cách rõ ràng nguyên mẫu của một đối tượng, vì vậy Object.createObject
không thể được thực hiện bằng ngôn ngữ riêng của mình. Một số triển khai cho phép nó thông qua thuộc tính không chuẩn __proto__. Trong trường hợp đó, new C
thể được mô phỏng như thế này:
var obj = {};
obj.__proto__ = C.prototype;
C.apply(obj, [arg1, arg2]);
Sắp xếp các liên quan: http://stackoverflow.com/question/1646698/what-is-the-new-keyword-in-javascript – Ivan