cái này trong JavaScript
Cải thiện bài viết
Lưu bài viết
Thích bài viết
- Độ khó. Trung bình
- Cập nhật lần cuối. 29 tháng 9 năm 2022
Cải thiện bài viết
Lưu bài viết
từ khóa này trong javascript luôn giữ tham chiếu đến một đối tượng duy nhất, xác định ngữ cảnh thực thi của dòng mã hiện tại. Các hàm, trong JavaScript, về cơ bản là các đối tượng. Giống như các đối tượng, chúng có thể được gán cho các biến, được truyền cho các hàm khác và được trả về từ các hàm. Và giống như các đối tượng, chúng có các thuộc tính riêng. Một trong những thuộc tính này là
Giá trị mà cửa hàng này là bối cảnh thực thi hiện tại của chương trình JavaScript. Do đó, khi được sử dụng bên trong một hàm, giá trị này sẽ thay đổi tùy thuộc vào cách hàm đó được xác định, cách nó được gọi và bối cảnh thực thi mặc định. từ khóa này sẽ đề cập đến các đối tượng khác nhau tùy thuộc vào cách nó được sử dụng.
Hàm, trong JavaScript, có thể được gọi theo nhiều cách
cái này với lời gọi hàm
Gọi hàm đề cập đến quá trình gọi một hàm sử dụng tên của nó hoặc một biểu thức đánh giá đối tượng hàm, theo sau là một tập hợp các dấu ngoặc mở và đóng đầu tiên [việc bao gồm các dấu ngoặc cho biết rằng chúng tôi đang yêu cầu công cụ JavaScript thực thi hàm ngay lập tức
Ví dụ.
JavaScript
undefined undefined0
undefined undefined1
undefined undefined2
undefined undefined3
undefined undefined4_______0_______5
undefined undefined1
undefined undefined7
undefined undefined8
undefined undefined9
John is 31 years old0
John is 31 years old1
John is 31 years old2
cái này bên trong hàm doS Something, nếu nó được gọi thông qua lời gọi hàm như trên, có giá trị của đối tượng toàn cục, là đối tượng cửa sổ trong môi trường trình duyệt
JavaScript
undefined undefined0
undefined undefined1
undefined undefined2
John is 31 years old9
[object Object] 1 [object Object] 20_______17_______1
undefined undefined4_______17_______3
[object Object] 1 [object Object] 24
[object Object] 1 [object Object] 25
[object Object] 1 [object Object] 26
undefined undefined1
undefined undefined7
undefined undefined8
undefined undefined9
[object Object] [object Window] NaN [object Object] [object Window] NaN1
John is 31 years old0
John is 31 years old1
[object Object] [object Window] NaN [object Object] [object Window] NaN4
đầu ra.
test value
Tuy nhiên, đây không phải là luôn luôn như vậy. Nếu hàm doS Something [] đang chạy ở chế độ nghiêm ngặt, nó sẽ ghi nhật ký không xác định thay vì đối tượng cửa sổ chung. Điều này là do, ở chế độ nghiêm ngặt [được biểu thị bằng dòng. 'sử dụng nghiêm ngặt';], giá trị mặc định của điều này, đối với bất kỳ đối tượng chức năng nào, được đặt thành không xác định thay vì đối tượng toàn cầu.
Ví dụ.
JavaScript
undefined undefined0
undefined undefined1
undefined undefined2
undefined undefined3
undefined undefined4_______38_______3
undefined undefined4_______38_______5
[object Object] 1 [object Object] 26
[object Object] 1 [object Object] 20
[object Object] [object Object] 1 [object Object] [object Object] 28
undefined undefined4_______45_______0
[object Object] 1 [object Object] 23
John is 21 years old2_______45_______3
John is 21 years old4
John is 21 years old5
undefined undefined2
John is 21 years old7
John is 21 years old8
John is 21 years old9
John is 21 years old8
12_______45_______0
[object Object] 1 [object Object] 23
John is 21 years old4
John is 21 years old5
undefined undefined7
undefined undefined4_______294_______9
undefined undefined1
undefined undefined7
undefined undefined8
undefined undefined9
John is 31 years old0
John is 31 years old1
6
đầu ra.
undefined undefined
cái này với lời gọi phương thức
Hàm, khi được định nghĩa là trường hoặc thuộc tính của đối tượng, được gọi là phương thức.
JavaScript
undefined undefined0
undefined undefined1
2undefined undefined4_______296_______4
5
6undefined undefined4_______296_______8
undefined undefined4_______0_______00
undefined undefined2
undefined undefined02
John is 21 years old5
John is 21 years old0
[object Object] 1 [object Object] 23
undefined undefined06
undefined undefined07
John is 21 years old2
[object Object] 1 [object Object] 23
undefined undefined10
undefined undefined11
undefined undefined12
undefined undefined4_______0_______7
undefined undefined1
undefined undefined7
[object Object] 1 [object Object] 20_______0_______18
[object Object] 1 [object Object] 20_______0_______20
undefined undefined21
John is 31 years old0
John is 31 years old1
undefined undefined24
đầu ra.
John is 31 years old
Trong ví dụ mã trên, logInfo[] là một phương thức của đối tượng người và chúng tôi đã gọi nó bằng cách sử dụng mẫu gọi đối tượng. Đó là, chúng tôi đã sử dụng các trình truy cập thuộc tính để truy cập phương thức là một phần của đối tượng
Một lời gọi như vậy yêu cầu sử dụng một biểu thức đánh giá đối tượng mà phương thức của chúng ta là một phần và một bộ truy cập thuộc tính [Ví dụ:. người. logInfo[]] theo sau là một tập hợp các dấu ngoặc đơn mở và đóng. Điều cần thiết là phải hiểu cách hoạt động của các lời gọi và các lời gọi phương thức khác nhau.
Đến lượt nó, điều này sẽ giúp chúng ta hiểu bối cảnh này có thể là gì trong bất kỳ chức năng cụ thể nào bởi vì, trong mỗi lời gọi này, giá trị của điều này là khác nhau
Bên trong một phương thức như vậy, đã được gọi bằng cách sử dụng bộ truy cập thuộc tính, phương thức này sẽ có giá trị của đối tượng đang gọi, đó là phương thức này sẽ trỏ đến đối tượng đã được sử dụng cùng với bộ truy cập thuộc tính để thực hiện cuộc gọi
Ví dụ.
JavaScript
undefined undefined0
undefined undefined1
undefined undefined27
undefined undefined4_______0_______29
undefined undefined4_______0_______31
undefined undefined2
undefined undefined02
undefined undefined1
John is 21 years old5
undefined undefined36
John is 21 years old5
John is 21 years old0
[object Object] 1 [object Object] 23
John is 21 years old2
undefined undefined41
John is 21 years old4
2_______17_______3
undefined undefined45
2______0_______47
John is 21 years old5
undefined undefined49
[object Object] 1 [object Object] 23
undefined undefined51
undefined undefined4_______0_______7
undefined undefined1
undefined undefined55
undefined undefined1
undefined undefined1
undefined undefined58
undefined undefined1
undefined undefined60
John is 21 years old3
undefined undefined12
undefined undefined1
undefined undefined64
undefined undefined1
undefined undefined66
undefined undefined67
đầu ra.
[object Object] 1 [object Object] 2
Trong ví dụ trên, calc[] là một phương thức của đối tượng bổ sung và do đó được gọi bằng cách sử dụng các quy tắc gọi phương thức trong dòng 9 và 10.
Và chúng tôi biết, khi các mẫu gọi phương thức được sử dụng, giá trị của điều này được đặt cho đối tượng gọi. Bên trong phương thức calc[] này, giá trị của this được đặt cho đối tượng đang gọi, trong trường hợp của chúng ta, giá trị này được thêm vào. và do đó chúng ta có thể truy cập thành công thuộc tính num của add.
Tuy nhiên, bây giờ chúng ta hãy xem xét một điểm nhầm lẫn lớn. Điều gì xảy ra với điều này trong một hàm được lồng bên trong một phương thức của một đối tượng?
JavaScript
undefined undefined0
undefined undefined1
undefined undefined27
undefined undefined4_______0_______29
undefined undefined4_______0_______31
undefined undefined2
undefined undefined02
undefined undefined1
undefined undefined4_______0_______36
undefined undefined4_______45_______0
[object Object] 1 [object Object] 23
John is 21 years old2_______0_______41
John is 21 years old4
undefined undefined1
undefined undefined4_______0_______2
undefined undefined89
John is 21 years old5
[object Object] 1 [object Object] 23
undefined undefined92
undefined undefined1
undefined undefined4_______0_______95
undefined undefined4_______45_______0
[object Object] 1 [object Object] 23
John is 21 years old2_______0_______41
undefined undefined12
undefined undefined1
undefined undefined4_______0_______49
[object Object] 1 [object Object] 23
undefined undefined45
undefined undefined1
undefined undefined1
undefined undefined7_______0_______49
John is 31 years old11
John is 31 years old12
undefined undefined7
undefined undefined1
undefined undefined55
undefined undefined1
undefined undefined1
John is 31 years old18
undefined undefined1
undefined undefined60
John is 21 years old3
undefined undefined12
undefined undefined1
undefined undefined1
John is 31 years old18
undefined undefined1
undefined undefined66
undefined undefined67
đầu ra.
[object Object] [object Window] NaN [object Object] [object Window] NaN
Hãy cố gắng hiểu những gì vừa xảy ra. Khi chúng ta gọi calc[] ở dòng 14 và 15, chúng ta đang sử dụng lời gọi phương thức để thiết lập điều này để thêm vào calc[]. Điều này có thể được xác minh bằng cách sử dụng câu lệnh nhật ký trong dòng 4
Tuy nhiên, innerfunc[] được gọi từ bên trong phương thức calc[] bằng cách sử dụng một lệnh gọi hàm đơn giản [dòng 11]. Điều này có nghĩa là, bên trong innerfunc[], đối tượng này được đặt thành đối tượng toàn cục, không có thuộc tính num và do đó thu được kết quả đầu ra NaN
Làm thế nào để chúng tôi giải quyết vấn đề này?
Một giải pháp là gán giá trị này từ hàm bên ngoài cho một biến được sử dụng trong hàm lồng nhau như vậy.
JavaScript
undefined undefined0
undefined undefined1
undefined undefined27
undefined undefined4_______0_______29
undefined undefined4_______0_______31
undefined undefined2
undefined undefined02
John is 21 years old5
undefined undefined36
John is 21 years old5
John is 21 years old0
[object Object] 1 [object Object] 23
John is 21 years old2
undefined undefined41
John is 21 years old4
John is 31 years old46_______10_______47
John is 31 years old46_______10_______49
John is 31 years old46_______10_______51
[object Object] 1 [object Object] 23
[object Object] 1 [object Object] 26
John is 21 years old5
undefined undefined2
John is 31 years old56
John is 21 years old5
John is 31 years old58
John is 31 years old59
John is 31 years old60
John is 31 years old59
John is 31 years old62
2______10_______64
John is 31 years old65
undefined undefined36
2_______10_______68
undefined undefined41
undefined undefined12
2_______0_______49
John is 31 years old73
John is 21 years old5
undefined undefined7
John is 21 years old5
undefined undefined49
John is 31 years old11
undefined undefined4_______0_______7
undefined undefined1
undefined undefined55
undefined undefined1
undefined undefined58
undefined undefined1
undefined undefined60
John is 21 years old3
undefined undefined12
undefined undefined1
undefined undefined64
undefined undefined1
undefined undefined66
John is 31 years old93
đầu ra.
[object Object] [object Object] 1 [object Object] [object Object] 2
Các giải pháp khác cho vấn đề này liên quan đến việc sử dụng bind[], call[] hoặc apply[] mà chúng tôi sẽ sớm xem xét
điều này với lời gọi hàm tạo
Lời gọi hàm tạo được thực hiện khi một từ khóa mới được theo sau bởi một tên hàm và một tập hợp các dấu ngoặc đơn mở và đóng [có hoặc không có đối số]
Ví dụ. let person1= new People[‘John’, 21];
Ở đây, person1 là đối tượng mới được tạo và People là hàm tạo được sử dụng để tạo đối tượng này. Lời gọi hàm tạo là một trong một số cách tạo đối tượng trong JavaScript. Chính xác thì điều gì sẽ xảy ra khi chúng ta sử dụng từ khóa mới kết hợp với tên hàm? .
Hãy để chúng tôi nghiên cứu chúng với ví dụ sau.
JavaScript
undefined undefined0
undefined undefined1
John is 31 years old96
undefined undefined2
John is 31 years old98
John is 31 years old59
[object Object] 1 [object Object] 23
[object Object] 1 [object Object] 201
John is 31 years old59
[object Object] 1 [object Object] 23
[object Object] 1 [object Object] 204
undefined undefined1
undefined undefined4_______17_______3
[object Object] 1 [object Object] 208
undefined undefined2
undefined undefined02
John is 31 years old46_______45_______0
[object Object] 1 [object Object] 23
undefined undefined06
undefined undefined07
John is 21 years old2
[object Object] 1 [object Object] 23
undefined undefined10
[object Object] 1 [object Object] 219
undefined undefined12