en.javascript.info/1-js/04-object-basics/04-object-methods/3-why-this/solution.md
Ilya Kantor 9ad9063d00 up
2016-11-28 21:35:42 +03:00

843 B

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:

    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.