This commit is contained in:
Ilya Kantor 2019-11-02 21:37:26 +03:00
parent a967ad0cf9
commit ad08b46c54

View file

@ -83,10 +83,12 @@ let user = {
setTimeout(() => user.sayHi(), 1000); setTimeout(() => user.sayHi(), 1000);
// ...within 1 second // ...the value of user changes within 1 second
user = { sayHi() { alert("Another user in setTimeout!"); } }; user = {
sayHi() { alert("Another user in setTimeout!"); }
};
// Another user in setTimeout?!? // Another user in setTimeout!
``` ```
The next solution guarantees that such thing won't happen. The next solution guarantees that such thing won't happen.
@ -159,9 +161,16 @@ let user = {
let sayHi = user.sayHi.bind(user); // (*) let sayHi = user.sayHi.bind(user); // (*)
*/!* */!*
// can run it without an object
sayHi(); // Hello, John! sayHi(); // Hello, John!
setTimeout(sayHi, 1000); // Hello, John! setTimeout(sayHi, 1000); // Hello, John!
// even if the value of user changes within 1 second
// sayHi uses the pre-bound value
user = {
sayHi() { alert("Another user in setTimeout!"); }
};
``` ```
In the line `(*)` we take the method `user.sayHi` and bind it to `user`. The `sayHi` is a "bound" function, that can be called alone or passed to `setTimeout` -- doesn't matter, the context will be right. In the line `(*)` we take the method `user.sayHi` and bind it to `user`. The `sayHi` is a "bound" function, that can be called alone or passed to `setTimeout` -- doesn't matter, the context will be right.