"Thuộc tính new.target cho phép bạn phát hiện xem một hàm hoặc constructor được gọi là sử dụng toán tử mới" [1]new.target với một nhà điều hành tiền tố
tôi có thể sử dụng new.target
trong một câu lệnh if để ném ra một lỗi nếu một chức năng không được gọi bằng new
:
if(!new.target){
throw new Error('Must be called with new keyword!')
}
Tuy nhiên, safari ngăn new.target
từ được sử dụng với các !
theo cách này, với thông báo lỗi
new.target không thể đến sau toán tử tiền tố
Tôi đã theo dõi số này xuống this line in Webkit.
Tuy nhiên, điều kiện tích cực có thể được kiểm tra!
if(new.target){}
else{
throw new Error('Must be called with new keyword!')
}
Đây có phải là lỗi với công cụ phân tích cú pháp của safari không? Hoặc cách khác, nên Tôi đang sử dụng new.target
theo cách họ thực thi?
repro đơn giản: https://codepen.io/mdjasper/pen/eEWORY?editors=0012
Edit: Vấn đề này đã được nộp trên webkit bugzilla: https://bugs.webkit.org/show_bug.cgi?id=157970
Ra khỏi tò mò, những gì sẽ xảy ra nếu bạn nói '! (New.target)'? – mhodges
Câu hỏi hay, không nghĩ về điều đó. Chỉ cần thử nó ra, và vẫn còn lỗi ra mặc dù:/ –
Con người, đó là rất lạ. [Bảng tương thích trình duyệt] (https://kangax.github.io/compat-table/es6/) cho thấy nó có hỗ trợ đầy đủ trong Safari, nhưng [MDN] (https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Operators/new.target) không hỗ trợ ... – mhodges