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値がセットされる関数呼び出しになるんですね。という驚きがあったのでメモ。

Mac OS XのターミナルでEmacsを使っていて、M-w(kill-ring-save)のつもりでうっかりコマンド+wをするとウィンドウごと閉じてしまって困るので、システム環境設定でターミナル用にコマンド+wのキーボードショートカットを適当なものに設定して回避しました。とっても便利。

本来M-wはメタキー+wなのでメタキーとしてoptionキーを割り当てておいてoptionキー+wで実行することになるわけですが、ついついコマンドキーを押してしまうことがあります。しかも最悪なことにウィンドウが閉じてしまうわけですね。困ったもんです。

そのために僕が考えた回避策がタイトルです。
とりあえず「ターミナルについて」に割り当ててみました。
でももうちょっとましな回避方法がある気がします。
例えばターミナルのときだけコマンドキーがoptionキーとして動作してくれてもいいけど、それだとコピペしたいときに困るんですよね。

あぁ、ターミナルのときだけコマンドキーとoptionキーが入れ替わるといいな。
そんな技あるかなぁ。。

→コメント欄参照。
id:swdyhさんにid:tunefsさん作成のプラグインを紹介してもらいました。
思いっきり欲しかったものそのものです。

Thunderbird+Lightning+Provider for Google Calendarのときの設定ではまったこと

ThunderbirdにLightningとProvider for Google CalenderというAdd onを使うとカレンダ機能が使えるようになって、かつGoogle Calendarと同期できるようになる。便利。
(→参考:Mozilla Re-Mix: 「Lightning」にGoogle カレンダーを同期させる「Provider for Google Calendar」

でも、会社内で外につなぐのにProxy設定が必要な場合に、はまった。
Google Calendarの接続先はHTTPSなのでSSLのプロキシ設定も必要になる。
で、メールの受信にもSSLを使ってて、当然そのサーバは会社内LAN内にあったりするとプロキシ経由ではアクセスできなかったりする。
だからプロキシを通さないアドレスとしてメールサーバのアドレス(かネットワークアドレスか)を登録しておかないといけない。
ちょっと考えれば当たり前なのだけどしばらく悩んでしまった。
要はメール受信にSSL使っていることにしばらく気がつかなかったわけで。
なのでメール受信にSSLを使ってなければこんな問題に出くわすこともないわけで、このパターンはレアケースなのかもしれないな。