Sự cố trong ví dụ 1 là 'this' đề cập đến tên chung thay vì đối tượng myName.Tại sao phải liên kết JavaScript()?
Tôi hiểu việc sử dụng bind() trong việc đặt giá trị của giá trị này cho một đối tượng cụ thể, vì vậy nó giải quyết được vấn đề trong ví dụ 1, nhưng tại sao vấn đề này lại xảy ra ngay từ đầu? Nó chỉ là cách Javascript được tạo ra?
Tôi cũng tự hỏi tại sao ví dụ 3 giải quyết vấn đề và sự khác biệt giữa các ví dụ 2 và 3.
this.name = "John"
var myName = {
name: "Tom",
getName: function() {
return this.name
}
}
var storeMyName = myName.getName; // example 1
var storeMyName2 = myName.getName.bind(myName); // example 2
var storeMyName3 = myName.getName(); // example 3
console.log("example 1: " + storeMyName()); // doesn't work
console.log("example 2: " + storeMyName2()); // works
console.log("example 3: " + storeMyName3); // works
* "Có phải nó chỉ là cách Javascript đã được tạo ra?" * Tôi đoán có. Giá trị của 'this' được xác định động, trừ khi nó là một hàm ràng buộc hoặc một mũi tên. Không chắc bạn muốn biết điều gì khác nữa [tìm hiểu về cách thức hoạt động của tính năng này] (https://github.com/getify/You-Dont-Know-JS/blob/master/this%20%26%20object%20prototypes /ch1.md). –
Có thể trùng lặp của [Javascript call() & apply() vs bind()?] (Http://stackoverflow.com/questions/15455009/javascript-call-apply-vs-bind) – azad
* "Tôi cũng tự hỏi tại sao ví dụ 3 giải quyết vấn đề "*' storeMyName' và 'storeMyName2' chứa * functions * trong khi' storeMyName3' chứa * kết quả * của * gọi * 'myName.getName()'. Sự khác biệt lớn. Tôi đã thực hiện so sánh này giữa các cách gọi một hàm và '.bind': https://twitter.com/fkling42/status/736228742008176640. Có lẽ nó giúp bằng cách nào đó. –