up
This commit is contained in:
parent
5372c18379
commit
3defacc09d
314 changed files with 1761 additions and 1704 deletions
|
@ -0,0 +1,22 @@
|
|||
|
||||
Here's the explanations.
|
||||
|
||||
1. That's a regular object method call.
|
||||
|
||||
2. The same, brackets do not change the order of operations here, the dot is first anyway.
|
||||
|
||||
3. Here we have a more complex call `(expression).method()`. The call works as if it were split into two lines:
|
||||
|
||||
```js no-beautify
|
||||
f = obj.go; // calculate the expression
|
||||
f(); // call what we have
|
||||
```
|
||||
|
||||
Here `f()` is executed as a function, without `this`.
|
||||
|
||||
4. The similar thing as `(3)`, to the left of the dot `.` we have an expression.
|
||||
|
||||
To explain the behavior of `(3)` and `(4)` we need to recall that property accessors (dot or square brackets) return a value of the Reference Type.
|
||||
|
||||
Any operation on it except a method call (like assignment `=` or `||`) turns it into an ordinary value, which does not carry the information allowing to set `this`.
|
||||
|
26
1-js/4-object-basics/04-object-methods/3-why-this/task.md
Normal file
26
1-js/4-object-basics/04-object-methods/3-why-this/task.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
importance: 3
|
||||
|
||||
---
|
||||
|
||||
# Explain the value of "this"
|
||||
|
||||
In the code above we intend to call `user.go()` method 4 times in a row.
|
||||
|
||||
But calls `(1)` and `(2)` works differently from `(3)` and `(4)`. Why?
|
||||
|
||||
```js run no-beautify
|
||||
let obj, method;
|
||||
|
||||
obj = {
|
||||
go: function() { alert(this); }
|
||||
};
|
||||
|
||||
obj.go(); // (1) [object Object]
|
||||
|
||||
(obj.go)(); // (2) [object Object]
|
||||
|
||||
(method = obj.go)(); // (3) undefined
|
||||
|
||||
(obj.go || obj.stop)(); // (4) undefined
|
||||
```
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue