Hàm tạo javascript không hoạt động
Khi bạn “gọi” hàm tạo bằng từ khóa 3, bạn sẽ nhận được một đối tượng mới được cấp phát và hàm tạo được gọi với đối tượng mới là ngữ cảnh hiện tại. Nếu bạn không trả về một cách rõ ràng bất cứ thứ gì từ hàm tạo, thì kết quả là bạn sẽ nhận được đối tượng mớiNhư vậy, phần thân của hàm khởi tạo được dùng để khởi tạo đối tượng mới được tạo. Có một điều khác. Đối tượng mới được tạo được khởi tạo để có nguyên mẫu. Nguyên mẫu nào? . Vì vậy, chúng ta có thể viết
Nhờ cơ chế bên trong của toán tử 5 của JavaScript, chúng ta có thể sử dụng nó để kiểm tra xem một đối tượng có khả năng đã được tạo bằng một hàm tạo cụ thể hay không
(Bạn có thể “đánh lừa” 5 khi làm việc với các thành ngữ nâng cao hơn, hoặc nếu bạn là kiểu người ba hoa ác ý chuyên thu thập các trường hợp góc cạnh ngôn ngữ và thích áp đặt chúng vào các ứng viên trong các cuộc phỏng vấn xin việc. Nhưng nó hoạt động đủ tốt cho mục đích của chúng tôi. )vấn đềĐiều gì xảy ra nếu chúng ta gọi hàm tạo nhưng vô tình bỏ qua từ khóa 3?
William-Thomas-Friedrich. ? . vì vậy 8 là không xác định. Đó không phải là những gì chúng tôi muốn. Trên thực tế, nó còn tệ hơn thếJavaScript đặt 9 thành môi trường toàn cầu theo mặc định để gọi một hàm thông thường, vì vậy chúng ta vừa hiểu nhầm về môi trường toàn cầu. Chúng ta có thể khắc phục phần nào 0Mặc dù mã 0 có thể bị bỏ qua trong các bài đăng trên blog và sách (mea culpa. ), trong sản xuất, nó gần như là bắt buộc vì những lý do như thế này. Tuy nhiên, các nhà xây dựng không tính đến khả năng được gọi mà không có từ khóa 3 là một vấn đề tiềm ẩnVậy chúng ta có thể làm gì? giải pháp. tự động khởi tạoTrong JavaScript hiệu quả, David Herman mô tả tự động khởi tạo. Khi chúng ta gọi một hàm tạo với 3, Biến giả 9 được đặt thành một thể hiện mới của “lớp” của chúng ta, có thể nói là như vậy. Chúng tôi có thể sử dụng điều này để phát hiện xem hàm tạo của chúng tôi có được gọi với 3 hay không 6Tại sao phải làm cho nó hoạt động mà không có 3? . Xem xét 9 7 trang trí một hàm bằng cách trả về một phiên bản của hàm ghi lại các đối số của nó. Hãy thử nó trên bản gốc 8 2Điều này không hiệu quả vì 9 thực sự là một thể hiện của 0, không phải của 8. Nhưng nếu chúng ta sử dụng phiên bản khởi tạo tự động của 8 7Bây giờ nó hoạt động, nhưng tất nhiên 9 là một thể hiện của 8, không phải của 0. Đó là điều bạn muốn? . ? . Nó không "chỉ hoạt động", nhưng nó có thể làm cho một số thứ trở nên khả thi (như trang trí các nhà xây dựng) mà nếu không thì thậm chí còn khó thực hiện hơngiải pháp. quá tải ý nghĩa của nóCó thể rất thuận tiện khi có một hàm kiểm tra xem một đối tượng có phải là một thể hiện của một lớp cụ thể không. Nếu chúng ta có thể chấp nhận ý tưởng về một chức năng thực hiện hai việc khác nhau, chúng ta có thể biến phương thức khởi tạo thành bài kiểm tra 5 của riêng mình 2Điều này cho phép chúng tôi sử dụng hàm tạo làm đối số trong vị ngữ và nhiều công văn hoặc dưới dạng bộ lọc 0giải pháp. giết nó bằng lửaNếu chúng tôi không có nhu cầu cấp thiết nào về tự động khởi tạo và nếu chúng tôi không quan tâm đến các chức năng bị quá tải, chúng tôi có thể tránh vô tình gọi một hàm tạo mà không sử dụng 3. Chúng tôi thấy rằng 0 có thể hữu ích, nhưng nó không phải là thuốc chữa bách bệnh. Nó sẽ không gây ra lỗi nếu chúng ta không thực sự cố gắng gán một giá trị cho môi trường toàn cầu. Và nếu chúng ta cố gắng làm điều gì đó trước khi gán giá trị, nó sẽ làm điều đó bất kể là gìCó lẽ tốt hơn là tự mình giải quyết vấn đề. Olivier Scherrer gợi ý mẫu sau 1Đơn giản và an toàn hơn là chỉ dựa vào 0. Nếu bạn muốn có một bài kiểm tra 5 đơn giản, bạn có thể đưa nó vào hàm tạo dưới dạng một phương thức hàm 2Ở đó bạn có nó. Các hàm tạo không thành công khi được gọi mà không có 3 là một vấn đề tiềm ẩn và ba giải pháp chúng ta có thể sử dụng tương ứng là tự động khởi tạo, làm quá tải hàm tạo hoặc tắt các lệnh gọi đó bằng lửa |