Understanding Javascript : This keyword
Nguồn tham khảo trang : nhungdongcodevui.com
1. Định nghĩa :
Trong js mọi giá trị đều là primitive hoặc reference (Object).
hàm cũng không phải ngoại lệ nó chính là một object , nếu hàm là một object thì cũng có những
thuộc tính và phương thức của riêng nó , khi một hàm được gọi (Hay nói rõ ràng hơn là khi một Execution Context được tạo ra)
+ Hàm sẽ có một thuộc tính là this (một từ khóa).
+ Theo mặc định giá trị của this sẽ tham chiếu đến đối tượng Window (trên browser) hoặc Global trên Node.js (trong user strict thì giá trị của nó là null)
+ Gía trị của this phụ thuộc vào đối tượng gọi hàm chứa nó.
+ This không phải là Lexical Scope mà là Dynamic Scope tức là giá trị của nó không phụ thuộc vào việc nó được khai báo ở đâu mà phụ thuộc vào việc nó được gọi bởi đối tượng nào.
+ Khi một hàm được gọi tách biệt mà không gọi bởi bất kì đối tượng cụ thể nào this sẽ được tham chiếu đến Window hoặc Global (nếu ở strict mode thì nó sẽ là undefine)
hàm cũng không phải ngoại lệ nó chính là một object , nếu hàm là một object thì cũng có những
thuộc tính và phương thức của riêng nó , khi một hàm được gọi (Hay nói rõ ràng hơn là khi một Execution Context được tạo ra)
+ Hàm sẽ có một thuộc tính là this (một từ khóa).
+ Theo mặc định giá trị của this sẽ tham chiếu đến đối tượng Window (trên browser) hoặc Global trên Node.js (trong user strict thì giá trị của nó là null)
+ Gía trị của this phụ thuộc vào đối tượng gọi hàm chứa nó.
+ This không phải là Lexical Scope mà là Dynamic Scope tức là giá trị của nó không phụ thuộc vào việc nó được khai báo ở đâu mà phụ thuộc vào việc nó được gọi bởi đối tượng nào.
+ Khi một hàm được gọi tách biệt mà không gọi bởi bất kì đối tượng cụ thể nào this sẽ được tham chiếu đến Window hoặc Global (nếu ở strict mode thì nó sẽ là undefine)
+ This được sử dụng chủ yếu để truy suất các thuộc tính và phương thức trong một đối tượng.
Từ là nếu
function A được gọi nó sẽ có thuộc tính là con trỏ A , con trỏ A này trỏ tới biến
đối tượng(object) A đang gọi functionA cho phép chúng ta thao tác với các thuộc
tính và phương thức
của đối tượng A.
của đối tượng A.
4 Trường hợp con
trỏ this hay gây nhầm lẫn khi sử dụng.
1.Sử dụng this trong sử dụng hàm callBack (Đối với jquery bạn sẽ gặp phải vấn đề này , để tránh gặp vấn đề này bạn có thể sử dụng javascript native)
1.Sử dụng this trong sử dụng hàm callBack (Đối với jquery bạn sẽ gặp phải vấn đề này , để tránh gặp vấn đề này bạn có thể sử dụng javascript native)
Chú ý : Có sự
khác biệt về document.getElementById(‘btn’) và $(‘#btn’)
Trước hết để sửa
lại câu lệnh chạy phù hợp theo ý muốn ta
cần hiểu về hàm Bind(một phương thức của function)
Hàm bind dùng để
+ Tạo hàm mới (có khả năng tái sử dụng)
+ Hàm mới được tạo ra trong hàm này chúng ta có thể trỏ con trỏ this đến vị trí tùy ý (đối tượng gọi hàm mà chúng ta mong muốn).
+ Hàm bind không kích hoạt hàm (sự khác biệt lớn nhất so với hàm apply và call).
Hàm bind dùng để
+ Tạo hàm mới (có khả năng tái sử dụng)
+ Hàm mới được tạo ra trong hàm này chúng ta có thể trỏ con trỏ this đến vị trí tùy ý (đối tượng gọi hàm mà chúng ta mong muốn).
+ Hàm bind không kích hoạt hàm (sự khác biệt lớn nhất so với hàm apply và call).
=> Ta thay đổi đối tượng gọi hàm mà chúng ta mong muốn thành HocSinh (truyền biến này vào hàm bind).
Hoặc bạn có thể sử dụng JavaScriptNative.
2.Con trỏ this trong closure (sử dụng con trỏ this trong hàm con)
=> Closure là hàm con nằm trong hàm khác (không phải phương thức của class , hay hàm gắn với object).
Con trỏ this
trong hàm Closue không thể trỏ đến hàm
cha (hàm chứa nó được).
Con trỏ this không thể truy suất được đối tượng gọi đến hàm khi trong hàm closure
Con trỏ this không thể truy suất được đối tượng gọi đến hàm khi trong hàm closure
=> Để khắc phục nhược điểm này chúng ta có thể dùng biến trung gian lưu trữ.
3. Con trỏ this trong trường hợp gán hàm cho một biến khác.
Để giải quyết vấn đề này chúng ta sử dụng bind() để điều hướng con trỏ theo ý muốn.
4.Con trỏ this trong hàm mượn (brrowing methods).
Nhận xét
Đăng nhận xét