new.target là một metaproperty cho phép xác định tại runtime xem một hàm hoặc constructor có được gọi với từ khóa new hay không.
Ví dụ
<!DOCTYPE html> <html lang="vi"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>new.target</title> <style> body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; } .result { font-size: 20px; font-weight: 500; color: blueviolet; } </style> </head> <body> <h1>new.target trong JavaScript</h1> <div class="result"></div> <br /> <button class="Btn">NHẤN VÀO ĐÂY</button> <h3>Nhấn nút trên để gọi constructor Student không dùng từ khóa new</h3> <script> let resEle = document.querySelector(".result"); let BtnEle = document.querySelector(".Btn"); function Student(name, age, place) { if (!new.target) { resEle.innerHTML = "Lỗi: Student phải được dùng với toán tử new"; } this.name = name; this.age = age; this.place = place; } BtnEle.addEventListener("click", () => { Student("Shawn", 22, "Delhi"); }); </script> </body> </html>
Kết quả
Khi nhấn nút, constructor Student được gọi như một hàm thường (không có new), nên new.target là undefined, kích hoạt khối if và hiển thị thông báo lỗi.
Điều này hữu ích để bắt buộc việc khởi tạo đối tượng đúng cách hoặc cho phép hàm hoạt động cả hai chế độ (factory function và constructor).