gotin blog

Whatever gotin wanna write

JavaScriptメモ:this値がセットされる場合とされない場合

this値が.の前の呼び出し元(ちゃんとした呼び名があるはずだけど知りません、すみません)になる場合

//(1)
'ABCDEF'.charAt(3);     // D 

//(2)
('ABCDEF'.charAt)(3);   // D  個人的にはこれもそうなんだってちょっとだけ驚いた。

this値にglobalオブジェクトが割り当てられる場合

//(3)
var f0 = 'ABCDEF'.charAt;
f0(3);                     // j

//(4)
var f1 = ('ABCDEF'.charAt);
f1(3);                     // j

//(5)
(0, 'ABCDEF'.charAt)(3);   // j

//(6)
(x='ABCDEF'.charAt)(3);    // j

// j なのは charAt実行時のthisがglobalオブジェクトになり、それをtoStringしたものが"[object Object]"になるから。

(2)と(4)はものすごくよく似てるけれど、(2)では()式で関数値が値として評価されてその関数がそのまま関数呼び出しに使われるからthis値がセットされない、と思ったのだけどそうではなく、this値がセットされる関数呼び出しになるんですね。という驚きがあったのでメモ。