Hiệu ứng của câu lệnh trả về trong phần thân hàm JavaScript khi nó được sử dụng như một hàm tạo cho một đối tượng mới (với từ khoá 'mới') là gì?Tuyên bố trả về trong JS Constructors
Trả lời
Thường là return
chỉ cần thoát khỏi hàm tạo. Tuy nhiên, nếu giá trị trả về là một đối tượng, nó được sử dụng như giá trị của biểu thức new
.
xem xét:
function f() {
this.x = 1;
return;
}
alert((new f()).x);
hiển thị 1, nhưng
function f() {
this.x = 1;
return { x: 2};
}
alert((new f()).x);
hiển thị 2.
Lý do để sử dụng toán tử new
là để đảm bảo rằng this
bên trong constructor dùng để chỉ một bối cảnh mới hỗ trợ:
this.functionName = function(){...};
, và cho phép việc sử dụng các instanceof
điều hành:
function foo() {...}
var bar = new foo();
alert(bar instanceof foo);
Sử dụng return {...}
bên trong một nhà xây dựng như phủ nhận cả hai hiệu ứng như this
sẽ không cần thiết với một mô hình như vậy, và như instanceof
sẽ trả lại false
.
Cảm ơn bạn đã phản hồi, tôi nghĩ điều này tiết lộ một nhược điểm của các nhà thầu js. – Tony
Hoặc cho thấy sự linh hoạt ngôn ngữ đã :) –
- 1. Tuyên bố trả về Scala trong các hàm ẩn danh
- 2. Bỏ qua tuyên bố trả về trong C++
- 3. Tuyên bố về trường hợp trong Slim
- 4. Tuyên bố, tuyên bố, tuyên bố
- 5. Hãy rút ngắn JS nếu hoặc tuyên bố
- 6. Giải thích về mới() tuyên bố này
- 7. mảng rỗng là sai, nhưng trong NẾU tuyên bố nó trả về true
- 8. SQL - TRẢ LỜI TRƯỜNG HỢP - WHEN tuyên bố VÀ tuyên bố
- 9. Tuyên bố so với tuyên bố đã chuẩn bị về mặt biên dịch
- 10. tuyên bố trước về cấu trúc trong C?
- 11. Tuyên bố về phía trước trong C++ là gì?
- 12. Tuyên bố LIKE của SQL về Loại ngày giờ
- 13. Tham gia để tuyên bố về hoạt động
- 14. Tuyên bố chuẩn bị Mysqli - Trả về False, nhưng tại sao?
- 15. Tuyên bố trả về của Ruby không hoạt động với từ khóa siêu?
- 16. MySQL và Python Chọn các vấn đề về Tuyên bố
- 17. Bootstrap Function Tuyên bố
- 18. SELECT tuyên bố trong JAVA
- 19. Jinja2 Nếu tuyên bố
- 20. DBNull nếu tuyên bố
- 21. Tuyên bố IF nội tuyến trong C#
- 22. PHP Tuyên Bố Giải thích
- 23. switch tuyên bố trong LINQ
- 24. Tuyên bố Foreach trong listbox
- 25. biến Tuyên bố trong @implementation
- 26. MYSQL trong bản Tuyên Bố
- 27. IF Tuyên bố nhiều điều kiện, cùng một tuyên bố
- 28. Tuyên bố về biến kiểu chung trừu tượng
- 29. Tuyên bố ngầm định về chức năng 'getaddrinfo' trên MinGW
- 30. Tuyên bố về trường hợp trên INNER Tham gia
Xem: http://stackoverflow.com/questions/1978049/what-values-can-a-constructor-return-to-avoid-returning-this/ – CMS