(edge case) .
, .
this .
.
let user = {
name: "John",
hi() { alert(this.name); },
bye() { alert("Bye"); }
};
user.hi(); // John ( .)
// name user.hi user.bye .
(user.name == "John" ? user.hi : user.bye)(); // TypeError: Cannot read property 'name' of undefined
user.hi user.bye . user name "John" user.hi .
. () hi .
"this" undefined .
.
user.hi();
.
(user.name == "John" ? user.hi : user.bye)();
? obj.method() , .
obj.method() .
-
'.'obj.method. -
()() .
this ?
this .
let user = {
name: "John",
hi() { alert(this.name); }
}
//
let hi = user.hi;
hi(); // this undefined .
hi = user.hi . this .
user.hi() . '.' , (Reference Type) .
' (specification type)'. .
(base, name, strict) .
base:name:strict: true
user.hi , ( ) . .
//
(user, "hi", true)
() , . this(=user) .
. () .
( ) user.hi () . this .
obj.method() , obj[method]() this . func.bind() , .
.
. (obj.method()) . .
() , this .
. . .
. .
<code>,<pre>. 10 plnkr, JSBin, codepen .