Vì vậy, tôi thấy nhiều mã JavaScript ở đó sử dụng "mới" khi tạo các hàm tạo. Sau khi đọc một phần của JavaScript, các phần tốt có vẻ như sử dụng "mới" không phải là bộ đồ ngủ của con mèo. Đó là 4 năm trước ... Mặc dù nó vẫn không được khuyến khích? Tiêu chuẩn hiện tại là gì?Có phải "mới" vẫn không được đề xuất trong JavaScript?
Trả lời
Vì khi nào là new
không được khuyến nghị? D. Crockford có một điểm hợp lệ và một ý kiến mạnh mẽ nhưng new
là một phần của ngôn ngữ và nó rất được sử dụng trong nhiều dự án. new
là một phần của mô hình thừa kế nguyên mẫu, và phải được sử dụng để tạo các cá thể mới với hàm dựng. Crockford chỉ ra một cách tiếp cận hoàn toàn chức năng sử dụng bối cảnh this
một cách thích hợp và return this
để có thể kế thừa các thuộc tính và phương thức giữa các đối tượng trẻ em. Đó là một giải pháp khác cho một vấn đề phổ biến, nhưng nó không có nghĩa là không nên sử dụng new
. Trong thực tế, một trong những nhất/dán đoạn JS bản sao của tất cả các lần là Crockford, các object.create
polyfill, và nó sử dụng new
:
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
Không có gì có nhiều thay đổi kể từ năm 2008 ngoài các Crockford chịu ảnh hưởng Object.create
làm theo cách của mình vào ECMAScript 5: new
vẫn có cùng một hành vi và hạn chế mà Douglas Crockford đã chỉ ra một cách mạnh mẽ. Ý kiến riêng của tôi là ông ấy đã phóng đại các vấn đề và chuyển các nhà phát triển thành một nhà điều hành hữu ích, vì vậy tôi tiếp tục sử dụng nó mà không có vấn đề; Tôi sẽ đề nghị các nhà phát triển khác tạo nên tâm trí của riêng họ chứ không phải là một cách mù quáng trong nội bộ và hối hận (Crockford đáng ngưỡng mộ).
Tôi đồng ý. Tôi nghĩ có lẽ anh ta nên nói rằng chúng ta nên sử dụng nó với kiến thức rằng có những hạn chế nhưng nó có thể sử dụng được. – Chris
- 1. Đề xuất cho một lập trình viên có kinh nghiệm mới với JavaScript?
- 2. Có phải JavaScript hoặc Javascript không?
- 3. Javascript Tạo mới "Chủ đề"
- 4. Bạn có thể đề xuất trình chỉnh sửa web WYSIWYG không phải HTML không?
- 5. Phát triển web: Chúng tôi vẫn cần hỗ trợ người dùng không phải là javascript không?
- 6. Có phải tập lệnh kỳ vọng vẫn đáng học?
- 7. Có cho phép JavaScript trong trình duyệt PHẢI có được các trang ASP.NET hoạt động không?
- 8. Mảng Javascript được tạo bằng Object.create - không phải mảng thực?
- 9. Thư viện hoạt hình JavaScript ... Đề xuất
- 10. Có phải "dài" vẫn hữu ích trong C?
- 11. Có phải "\ /" hợp lệ bên trong một regex javascript không?
- 12. Đề xuất tạo trang web mới có tính năng giống như "ứng dụng" trong .NET
- 13. Có phải SecurityContextChủ đề an toàn không?
- 14. Kích thước tối đa được đề xuất của đối tượng JSON bên ngoài trong JavaScript
- 15. Tại sao kết nối: giữ liên tục vẫn được chỉ định trong tiêu đề http (không phải là nó không được chấp nhận)?
- 16. Có phải là một đối tượng trong JavaScript không?
- 17. Nhà xuất bản không xác định vẫn xuất hiện trên chính xác mã VSTO addin được xây dựng với VS2010
- 18. In cùng dòng và không phải dòng mới trong python
- 19. Chạy hàm trên lần tải trang đầu tiên không phải trên trang làm mới trong javascript
- 20. Có phải C# xử lý các loại không cho phép null từ F # vẫn không thể thực hiện được không?
- 21. Các thành phần meta được đề xuất?
- 22. Biến mẫu có phải là biến toàn cục mới không?
- 23. Các khóa riêng được xuất trong GPG vẫn được mã hóa chưa?
- 24. Có phải CoreGraphics (nhiều) chậm hơn trên iPad mới không?
- 25. Có phải C++ vẫn chủ động được sử dụng cho mục đích phát triển chung?
- 26. MongoDB: phân đoạn mới xuất hiện, nhưng không hiển thị nội dung. Đây có phải là dự kiến không?
- 27. Tài nguyên được đề xuất cho lập trình viên mới của ARM?
- 28. Đề xuất thư viện xác thực biểu mẫu javascript
- 29. Mục tiêu = '_ trống' để hiển thị trong cửa sổ mới, KHÔNG phải tab mới, có thể không?
- 30. Không có đề xuất Chỉnh sửa văn bản có nhiều dòng trong android
Điều đó đúng! Cũng trong cuốn sách của ông, ông đề cập đến "Sử dụng phong cách này của hàm xây dựng không được khuyến khích" (phong cách sử dụng mới). Sau đó, ông tiếp tục mô tả các giải pháp khác. Đó là lý do tại sao tôi đưa ra câu hỏi. – Parris
Ông không khuyên bạn nên nó bởi vì nó có thể dẫn đến sự nhầm lẫn trong một số trường hợp, nhưng có những thực hành phổ biến khác để tránh nhầm lẫn như tận dụng hàm dựng hàm của bạn. Bạn có thể nói điều tương tự về Crockford không đề xuất sử dụng '++' và' --' ... – elclanrs
Cả hai đều nghĩ rằng có thể sử dụng được nhưng tôi đã ngừng sử dụng chúng bởi vì tất cả mọi người tôi làm việc đều quyết định ngừng sử dụng các toán tử này. – Chris