Giải thích từ khóa này trong javascript

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
  • Bàn luận
  • khóa học
  • Luyện tập
  • Băng hình
  • 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
    undefined 
    0

    undefined
    undefined 
    1
    undefined
    undefined 
    2
    undefined
    undefined 
    3

    undefined
    undefined 
    4_______0_______5

    undefined
    undefined 
    1
    undefined
    undefined 
    7

     

    undefined
    undefined 
    8

    undefined
    undefined 
    9

    John is 31 years old 
    0

    John is 31 years old 
    1

    John is 31 years old 
    2

    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
    undefined 
    0

    undefined
    undefined 
    1
    undefined
    undefined 
    2
    John is 31 years old 
    9

     

    [object Object] 1
    [object Object] 2 
    0_______17_______1

    undefined
    undefined 
    4_______17_______3
    [object Object] 1
    [object Object] 2 
    4
    [object Object] 1
    [object Object] 2 
    5
    [object Object] 1
    [object Object] 2 
    6

    undefined
    undefined 
    1
    undefined
    undefined 
    7

     

    undefined
    undefined 
    8

    undefined
    undefined 
    9

    [object Object] [object Window] NaN
    [object Object] [object Window] NaN 
    1

    John is 31 years old 
    0

    John is 31 years old 
    1

    [object Object] [object Window] NaN
    [object Object] [object Window] NaN 
    4

    đầ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
    undefined 
    0

    undefined
    undefined 
    1
    undefined
    undefined 
    2
    undefined
    undefined 
    3

    undefined
    undefined 
    4_______38_______3

    undefined
    undefined 
    4_______38_______5
    [object Object] 1
    [object Object] 2 
    6

     

    [object Object] 1
    [object Object] 2 
    0
    [object Object] [object Object] 1
    [object Object] [object Object] 2 
    8

    undefined
    undefined 
    4_______45_______0
    [object Object] 1
    [object Object] 2 
    3
    John is 21 years old 
    2_______45_______3
    John is 21 years old 
    4

    John is 21 years old 
    5
    undefined
    undefined 
    2
    John is 21 years old 
    7

    John is 21 years old 
    8
    John is 21 years old 
    9

    John is 21 years old 
    81

    2_______45_______0

    [object Object] 1
    [object Object] 2 
    3
    John is 21 years old 
    4

    John is 21 years old 
    5
    undefined
    undefined 
    7

    undefined
    undefined 
    4_______294_______9

    undefined
    undefined 
    1
    undefined
    undefined 
    7

     

    undefined
    undefined 
    8

    undefined
    undefined 
    9

    John is 31 years old 
    0

    John is 31 years old 
    1

    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
    undefined 
    0

    undefined
    undefined 
    12

    undefined
    undefined 
    4_______296_______456

    undefined
    undefined 
    4_______296_______8

    undefined
    undefined 
    4_______0_______00
    undefined
    undefined 
    2
    undefined
    undefined 
    02

    John is 21 years old 
    5
    John is 21 years old 
    0
    [object Object] 1
    [object Object] 2 
    3
    undefined
    undefined 
    06
    undefined
    undefined 
    07
    John is 21 years old 
    2
    [object Object] 1
    [object Object] 2 
    3
    undefined
    undefined 
    10
    undefined
    undefined 
    11
    undefined
    undefined 
    12

    undefined
    undefined 
    4_______0_______7

    undefined
    undefined 
    1
    undefined
    undefined 
    7

    [object Object] 1
    [object Object] 2 
    0_______0_______18

    [object Object] 1
    [object Object] 2 
    0_______0_______20

    undefined
    undefined 
    21
    John is 31 years old 
    0

    John is 31 years old 
    1

    undefined
    undefined 
    24

    đầ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
    undefined 
    0

    undefined
    undefined 
    1
    undefined
    undefined 
    27

    undefined
    undefined 
    4_______0_______29

    undefined
    undefined 
    4_______0_______31
    undefined
    undefined 
    2
    undefined
    undefined 
    02

    undefined
    undefined 
    1

    John is 21 years old 
    5
    undefined
    undefined 
    36

    John is 21 years old 
    5
    John is 21 years old 
    0
    [object Object] 1
    [object Object] 2 
    3
    John is 21 years old 
    2
    undefined
    undefined 
    41
    John is 21 years old 
    4

    2_______17_______3

    undefined
    undefined 
    45

    2______0_______47

    John is 21 years old 
    5
    undefined
    undefined 
    49
    [object Object] 1
    [object Object] 2 
    3
    undefined
    undefined 
    51

    undefined
    undefined 
    4_______0_______7

    undefined
    undefined 
    1
    undefined
    undefined 
    55

    undefined
    undefined 
    1

    undefined
    undefined 
    1
    undefined
    undefined 
    58

    undefined
    undefined 
    1
    undefined
    undefined 
    60
    John is 21 years old 
    3
    undefined
    undefined 
    12

    undefined
    undefined 
    1
    undefined
    undefined 
    64

    undefined
    undefined 
    1
    undefined
    undefined 
    66

    undefined
    undefined 
    67

    đầ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
    undefined 
    0

    undefined
    undefined 
    1
    undefined
    undefined 
    27

    undefined
    undefined 
    4_______0_______29

    undefined
    undefined 
    4_______0_______31
    undefined
    undefined 
    2
    undefined
    undefined 
    02

    undefined
    undefined 
    1

    undefined
    undefined 
    4_______0_______36

    undefined
    undefined 
    4_______45_______0
    [object Object] 1
    [object Object] 2 
    3
    John is 21 years old 
    2_______0_______41
    John is 21 years old 
    4

    undefined
    undefined 
    1

    undefined
    undefined 
    4_______0_______2
    undefined
    undefined 
    89

    John is 21 years old 
    5
    [object Object] 1
    [object Object] 2 
    3
    undefined
    undefined 
    92

    undefined
    undefined 
    1

    undefined
    undefined 
    4_______0_______95

    undefined
    undefined 
    4_______45_______0
    [object Object] 1
    [object Object] 2 
    3
    John is 21 years old 
    2_______0_______41
    undefined
    undefined 
    12

    undefined
    undefined 
    1

    undefined
    undefined 
    4_______0_______49
    [object Object] 1
    [object Object] 2 
    3
    undefined
    undefined 
    45

    undefined
    undefined 
    1

    undefined
    undefined 
    1
    undefined
    undefined 
    7_______0_______49
    John is 31 years old 
    11

    John is 31 years old 
    12
    undefined
    undefined 
    7

    undefined
    undefined 
    1
    undefined
    undefined 
    55

    undefined
    undefined 
    1

    undefined
    undefined 
    1
    John is 31 years old 
    18

    undefined
    undefined 
    1
    undefined
    undefined 
    60
    John is 21 years old 
    3
    undefined
    undefined 
    12

    undefined
    undefined 
    1

    undefined
    undefined 
    1
    John is 31 years old 
    18

    undefined
    undefined 
    1
    undefined
    undefined 
    66

    undefined
    undefined 
    67

    đầ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
    undefined 
    0

    undefined
    undefined 
    1
    undefined
    undefined 
    27

    undefined
    undefined 
    4_______0_______29

    undefined
    undefined 
    4_______0_______31
    undefined
    undefined 
    2
    undefined
    undefined 
    02

     

    John is 21 years old 
    5
    undefined
    undefined 
    36

    John is 21 years old 
    5
    John is 21 years old 
    0
    [object Object] 1
    [object Object] 2 
    3
    John is 21 years old 
    2
    undefined
    undefined 
    41
    John is 21 years old 
    4

     

    John is 31 years old 
    46_______10_______47

    John is 31 years old 
    46_______10_______49

    John is 31 years old 
    46_______10_______51
    [object Object] 1
    [object Object] 2 
    3
    [object Object] 1
    [object Object] 2 
    6

     

    John is 21 years old 
    5
    undefined
    undefined 
    2
    John is 31 years old 
    56

    John is 21 years old 
    5
    John is 31 years old 
    58

     

    John is 31 years old 
    59
    John is 31 years old 
    60

    John is 31 years old 
    59
    John is 31 years old 
    62

    2______10_______64

     

    John is 31 years old 
    65
    undefined
    undefined 
    36

    2_______10_______68

    undefined
    undefined 
    41
    undefined
    undefined 
    12

    2_______0_______49

    John is 31 years old 
    73

    John is 21 years old 
    5
    undefined
    undefined 
    7

    John is 21 years old 
    5
    undefined
    undefined 
    49
    John is 31 years old 
    11

    undefined
    undefined 
    4_______0_______7

    undefined
    undefined 
    1
    undefined
    undefined 
    55

    undefined
    undefined 
    1
    undefined
    undefined 
    58

    undefined
    undefined 
    1
    undefined
    undefined 
    60
    John is 21 years old 
    3
    undefined
    undefined 
    12

     

    undefined
    undefined 
    1
    undefined
    undefined 
    64

    undefined
    undefined 
    1
    undefined
    undefined 
    66

    John is 31 years old 
    93

    đầ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
    undefined 
    0

    undefined
    undefined 
    1
    John is 31 years old 
    96
    undefined
    undefined 
    2
    John is 31 years old 
    98

    John is 31 years old 
    59
    [object Object] 1
    [object Object] 2 
    3
    [object Object] 1
    [object Object] 2 
    01

    John is 31 years old 
    59
    [object Object] 1
    [object Object] 2 
    3
    [object Object] 1
    [object Object] 2 
    04

    undefined
    undefined 
    1

    undefined
    undefined 
    4_______17_______3
    [object Object] 1
    [object Object] 2 
    08
    undefined
    undefined 
    2
    undefined
    undefined 
    02

    John is 31 years old 
    46_______45_______0
    [object Object] 1
    [object Object] 2 
    3
    undefined
    undefined 
    06
    undefined
    undefined 
    07
    John is 21 years old 
    2
    [object Object] 1
    [object Object] 2 
    3
    undefined
    undefined 
    10
    [object Object] 1
    [object Object] 2 
    19
    undefined
    undefined 
    12

    Từ khóa này được gọi là gì?

    Từ khóa this tham chiếu đến đối tượng hiện tại trong một phương thức hoặc hàm tạo . Cách sử dụng phổ biến nhất của từ khóa this là để loại bỏ sự nhầm lẫn giữa các thuộc tính lớp và các tham số có cùng tên [vì một thuộc tính lớp bị che khuất bởi một phương thức hoặc tham số hàm tạo].

    Từ khóa này có quan trọng trong JavaScript không?

    Nhưng điều cực kỳ quan trọng để viết mã JavaScript nâng cao hơn . Trong JavaScript, từ khóa này cho phép chúng tôi. Sử dụng lại các chức năng trong các ngữ cảnh thực thi khác nhau. Điều đó có nghĩa là, một hàm sau khi được xác định có thể được gọi cho các đối tượng khác nhau bằng cách sử dụng từ khóa this.

    Bốn nguyên tắc của từ khóa này trong JavaScript là gì?

    Từ khóa this, khi được sử dụng trong một hàm, sẽ liên kết hàm đó với một đối tượng ngữ cảnh. Có bốn loại ràng buộc. liên kết mặc định, liên kết ngầm, liên kết rõ ràng và liên kết lệnh gọi hàm tạo [mới] Biết bốn quy tắc này sẽ giúp bạn dễ dàng phân biệt ngữ cảnh của tham chiếu này.

    Đây có phải là từ khóa hoặc biến trong JavaScript không?

    từ khóa này xác định một đối tượng, đối tượng đó đang thực thi đoạn mã JavaScript hiện tại. Trong JavaScript, biến “this” là một biến mà mọi ngữ cảnh thực thi đều nhận được trong một lệnh gọi hàm thông thường. Mỗi hàm JavaScript có một tham chiếu đến bối cảnh thực thi hiện tại của nó trong khi thực thi, được gọi là.

    Chủ Đề