Hướng dẫn reference type and losing this in javascript - loại tham chiếu và mất cái này trong javascript
Tính năng ngôn ngữ chuyên sâu Bài viết này bao gồm một chủ đề nâng cao, để hiểu một số trường hợp cạnh nhất định tốt hơn. Điều đó không quan trọng. Nhiều nhà phát triển có kinh nghiệm sống tốt mà không biết nó. Đọc tiếp nếu bạn muốn biết mọi thứ hoạt động như thế nào dưới mui xe. Một cuộc gọi phương thức được đánh giá động có thể mất Ví dụ:
Trên dòng cuối cùng có một toán tử có điều kiện chọn 1 hoặc 2. Trong trường hợp này, kết quả là 1.Sau đó, phương thức được gọi ngay lập tức với dấu ngoặc đơn 4. Nhưng nó không hoạt động chính xác!Như bạn có thể thấy, cuộc gọi dẫn đến một lỗi, bởi vì giá trị của 5 bên trong cuộc gọi trở thành 6.Điều này hoạt động (Phương thức chấm đối tượng): Điều này không (phương pháp đánh giá):
Tại sao? Nếu chúng ta muốn hiểu lý do tại sao nó xảy ra, hãy để Lôi nhận được dưới mui xe của cách thức hoạt động của 7.Loại tham chiếu giải thíchNhìn kỹ, chúng tôi có thể nhận thấy hai hoạt động trong tuyên bố 7:
Vì vậy, làm thế nào để thông tin về 0 được chuyển từ phần đầu tiên sang phần thứ hai?Nếu chúng ta đặt các hoạt động này trên các dòng riêng biệt, thì chắc chắn 0 sẽ bị mất:
Ở đây 4 đặt hàm vào biến, và sau đó trên dòng cuối cùng, nó hoàn toàn độc lập, và do đó, không có 0.Để thực hiện các cuộc gọi Loại tham chiếu là một loại đặc điểm kỹ thuật của người Viking. Chúng ta có thể sử dụng rõ ràng nó, nhưng nó được sử dụng trong nội bộ bởi ngôn ngữ. Giá trị của loại tham chiếu là sự kết hợp ba giá trị 8, trong đó:
Kết quả của quyền truy cập thuộc tính 1 không phải là một hàm, mà là một giá trị của loại tham chiếu. Đối với 1 ở chế độ nghiêm ngặt, đó là:
Khi dấu ngoặc đơn 4 được gọi trên loại tham chiếu, họ sẽ nhận được thông tin đầy đủ về đối tượng và phương thức của nó và có thể đặt đúng ____10 ( 7 trong trường hợp này).Loại tham chiếu là một loại nội bộ trung gian đặc biệt của người Viking, với mục đích chuyển thông tin từ DOT 8 sang gọi dấu ngoặc đơn 4.Bất kỳ hoạt động nào khác như gán 4 đều loại bỏ loại tham chiếu nói chung, lấy giá trị của 1 (một hàm) và truyền nó. Vì vậy, bất kỳ hoạt động nào khác có thể mất các hoạt động khác.Vì vậy, kết quả là, giá trị của 0 chỉ được truyền đúng cách nếu hàm được gọi trực tiếp bằng cách sử dụng dấu chấm chấm 7 hoặc vuông 5 (chúng làm tương tự ở đây). Có nhiều cách khác nhau để giải quyết vấn đề này như func.bind ().Bản tóm tắtLoại tham chiếu là một loại ngôn ngữ nội bộ. Đọc một thuộc tính, chẳng hạn như với DOT 8 trong 7 trả về không chính xác giá trị thuộc tính, mà là một giá trị loại tham chiếu đặc biệt của người dùng lưu trữ cả giá trị thuộc tính và đối tượng được lấy từ.Đó là cách mà phương thức tiếp theo gọi 4 để lấy đối tượng và đặt 0 cho nó.Đối với tất cả các hoạt động khác, loại tham chiếu sẽ tự động trở thành giá trị thuộc tính (một hàm trong trường hợp của chúng tôi). Toàn bộ cơ học được ẩn khỏi mắt chúng ta. Nó chỉ quan trọng trong các trường hợp tinh tế, chẳng hạn như khi một phương thức thu được động từ đối tượng, sử dụng một biểu thức. Nhiệm vụTầm quan trọng: 2 Kết quả của mã này là gì?
P.S. Có một cạm bẫy :) Error!! Thử nó:
Thông báo lỗi trong hầu hết các trình duyệt không cho chúng ta nhiều manh mối về những gì đã sai. Lỗi xuất hiện do dấu chấm phẩy bị thiếu sau JavaScript không tự động chèn một dấu chấm phẩy trước khung 1, vì vậy nó đọc mã như:
Sau đó, chúng ta cũng có thể thấy rằng một biểu thức chung như vậy là một cách cú pháp của đối tượng 2 như là một hàm với đối số 3. Và điều đó cũng xảy ra trên cùng một dòng với 4, vì vậy đối tượng 7 chưa được xác định, do đó lỗi.Nếu chúng ta chèn dấu chấm phẩy, tất cả đều ổn:
Xin lưu ý rằng dấu ngoặc đơn xung quanh 3 không làm gì ở đây. Thông thường, họ thiết lập thứ tự hoạt động, nhưng ở đây, DOT 8 hoạt động trước tiên, vì vậy, không có hiệu quả. Chỉ có những điều bán kết quan trọng.
Tầm quan trọng: 3 Trong mã bên dưới, chúng tôi dự định gọi phương thức 8 4 lần liên tiếp.Nhưng gọi 9 và 0 hoạt động khác với 1 và 2. Tại sao?
Ở đây, những lời giải thích.
Để giải thích hành vi của 1 và 2, chúng ta cần nhớ lại rằng người truy cập tài sản (dấu chấm hoặc dấu ngoặc vuông) trả về giá trị của loại tham chiếu.Bất kỳ hoạt động nào trên đó ngoại trừ một cuộc gọi phương thức (như gán 0 hoặc 1) biến nó thành một giá trị thông thường, không mang thông tin cho phép đặt ____10.
Loại tham chiếu trong JavaScript là gì?Các loại dữ liệu tham chiếu, không giống như các loại dữ liệu nguyên thủy, có bản chất động. Đó là, họ không có kích thước cố định. Hầu hết chúng được coi là đối tượng, và do đó có các phương pháp. Ví dụ về các loại dữ liệu đó bao gồm mảng, chức năng, bộ sưu tập và tất cả các loại đối tượng khác.dynamic in nature. That is, they do not have a fixed size. Most of them are considered as objects, and therefore have methods. Examples of such data types include arrays, functions, collections, and all other types of objects.
Sự khác biệt giữa loại giá trị và loại tham chiếu trong JavaScript là gì?Trong JavaScript, bạn có thể chuyển qua giá trị và bằng cách tham khảo.Sự khác biệt chính giữa hai là chuyển qua giá trị xảy ra khi gán nguyên thủy trong khi truyền bằng cách tham chiếu khi gán các đối tượng.passing by value happens when assigning primitives while passing by reference when assigning objects.
JavaScript có thể sao chép đối tượng bằng tài liệu tham khảo không?Các đối tượng được gán và sao chép bằng tham chiếu.Nói cách khác, một thay đổi lưu trữ không phải là giá trị đối tượng của người dùng, mà là một tham chiếu trên mạng (địa chỉ trong bộ nhớ) cho giá trị.Vì vậy, sao chép một biến như vậy hoặc truyền nó như một đối số chức năng sao chép tham chiếu đó, không phải chính đối tượng.. In other words, a variable stores not the “object value”, but a “reference” (address in memory) for the value. So copying such a variable or passing it as a function argument copies that reference, not the object itself.
Giá trị loại tham chiếu nào được JavaScript chấp nhận?JavaScript có 5 loại dữ liệu được truyền theo giá trị: boolean, null, không xác định, chuỗi và số.Chúng tôi sẽ gọi các loại nguyên thủy này.JavaScript có 3 loại dữ liệu được truyền bởi tham chiếu: mảng, chức năng và đối tượng.Array , Function , and Object . |