Sự khác biệt cơ bản giữa fn () và fn () mới trong javascript


12

Trong tất cả các khía cạnh, việc gọi một hàm có và không có từ khóa mới khác nhau trong javascript là gì? Tôi có nghĩa là những gì tất cả mọi thứ là khác nhau giữa?

testFn() đấu với new testFn()

Câu trả lời:


13

newtạo một đối tượng mới (trống) và thiết lập thischo nó, sau đó gọi hàm, đóng vai trò là hàm tạo cho đối tượng (bằng cách thao tác this. một cái gì đó ). Gọi cùng một chức năng mà không có newtừ khóa sẽ cho phép nó hoạt động trên bất cứ điều gì thishiện tại có nghĩa.


Có bất cứ điều gì hơn thế này?
akp

@akp không, nó thật sự đơn giản. Ngoại trừ những gì không được đề cập là nếu hàm trả về một kiểu tham chiếu rõ ràng, thì nó được trả về newvà đối tượng được tạo sẽ bị lãng phí.
Esailija

2
Việc sử dụng newsẽ khiến nguyên mẫu của đối tượng mới được đặt thành tham chiếu của hàm đầu tiên mà đối tượng mới được truyền. Tôi không nghĩ rằng hành vi đó có thể đạt được một cách hợp pháp thông qua các phương tiện khác.
supercat

Bạn nói đúng, tôi đã bỏ lỡ điều đó.
dùng281377

1

Các biến thể này khác nhau về mặt cú pháp: với biến thể "mới" cho rằng hàm là hàm tạo. Biến thể không có "mới" cho rằng nó không phải là hàm tạo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.