Trong JavaScript, tại sao toán tử this không nhất quán?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
451 lượt xem
Javascript master

Điều quan trọng nhất cần hiểu là một function object không có giá trị "this" cố định - giá trị của this thay đổi tùy thuộc vào cách hàm được gọi. Chúng ta nói rằng một hàm được gọi với một giá trị this cụ thể nào đó - giá trị this được xác định tại thời điểm gọi, không phải thời gian định nghĩa.

  • Nếu hàm được gọi là "raw" function (ví dụ: chỉ thực hiện someFunc()), thì this sẽ là Global object (window trong trình duyệt) (hoặc undefined nếu hàm chạy ở strict mode).
  • Nếu nó được gọi như một phương thức trong một đối tượng, thì this sẽ là đối tượng đang gọi.
  • Nếu bạn gọi một hàm bằng lệnh call hoặc apply, thì this được chỉ định làm đối số đầu tiên của call hoặc apply.
  • Nếu nó được gọi như là một Event listener, thì this sẽ là target element của sự kiện đó.
  • Nếu nó được gọi là một phương thức khởi tạo với new, this sẽ là một đối tượng mới được tạo có prototype được đặt thành prototype property của hàm khởi tạo.
  • Nếu hàm là kết quả của một hành động bind, thì hàm sẽ luôn và mãi mãi có this được gán thành đối số đầu tiên của lệnh bind đó. (Đây là ngoại lệ duy nhất của quy tắc "một function object không có giá trị this cố định" - các hàm được tạo bởi bind thực sự có this không thay đổi.)
{{login.error}}