2012-08-09 32 views
6

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

7

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(); 
    }; 
} 
+0

Đ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

+3

Ô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

+0

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

2

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ộ).

+0

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

Các vấn đề liên quan