Giả sử bạn đang tạo kiểu dữ liệu và vạch trần hành vi của nó.Javascript: một số nguyên tắc về cách xác định loại dữ liệu mới là gì?
Bạn có thể đưa ra một số ví dụ về khi bạn sẽ sử dụng:
một hàm & mới:
// define new data type var CustomDataType= function(){ this.a='whatever'; this.doX= function(){/*some code*/}; } // create a new instance of our custom data type var obj= new customDataType();
một đối tượng đen & Object.create:
// define new data type var customDataType = { a: 'whatever', doX: function(){/*some code*/} } // create a new instance of our custom data type var obj= Object.create(customDataType);
một chức năng giúp bạn xây dựng đối tượng r:
function customDataTypeFactory(options){ return { a: 'whatever', doX: function(){/*some code*/} } }; // create a new instance of our custom data type var obj= customDataTypeFactory(options);
tôi cảm thấy điều này có thể được dán nhãn trùng lặp cho: new
vs Object.create
nhưng sự quan tâm chính của tôi không có trong thảo luận cái nào là tốt hơn nhưng thay vì biết nếu có những trường hợp sử dụng cụ thể mà người ta nên được ưa thích hơn những người khác.
Tôi đã đọc nhiều bài đăng về các câu hỏi liên quan và sách từ Crockford: Javascript: các phần hay. Cho đến nay tôi đã kết luận rằng đó là vấn đề ưu tiên, khó khăn từ lời khuyên của Crockford vang dội với tôi với tôi: "cố gắng tránh những tính năng nguy hiểm và không cần thiết" ... Tôi đang nói về new
.
Phiên bản đầu tiên và thứ ba của bạn đặt thuộc tính trực tiếp trên đối tượng mới. Trong phiên bản thứ hai của bạn, đối tượng thừa hưởng các thuộc tính. Tôi không biết rằng có bất kỳ câu trả lời cụ thể cho câu hỏi của bạn. Việc đầu tiên sử dụng một constructor nếu bạn gọi bằng cách sử dụng 'new', và' instanceof' sẽ làm việc để xác định đối tượng đó.Cái thứ ba không yêu cầu sử dụng 'new', nhưng' instanceof' sẽ không hữu dụng. Điều thứ hai một lần nữa thừa kế các thuộc tính, do đó, xây dựng một số đối tượng theo cách đó tất cả sẽ chia sẻ dữ liệu và tất cả các đối tượng sẽ quan sát các bản cập nhật cho đối tượng được kế thừa. –
... và đừng quá hung hăng về cảnh báo nguy hiểm của Crockford. Tôi nghĩ anh ấy lo lắng quá nhiều. Ý tôi là, lấy tất cả vào, nhưng lấy nó bằng một hạt muối. –
'this.doX =' nên là 'doX:' trong hai đoạn cuối –