Panda Noir

JavaScript の限界を究めるブログです。

JavaScriptで関数のエイリアス(ショートカット)の作り方

この間テスト用にいろいろといじってたときにdocument.writeを書くのがいやでエイリアスを作ったときに使った方法の紹介をしたいと思います。

追記: 2015/6/28 記事に書いてある方法では不完全でした。記事の最後の追記もお読みください。

どうやるの

まず、Javascriptにおいて関数とは何かというところから説明したいと思います。関数とは変数です。え、と思った人もいると思います。でもこれが事実です。詳しい説明はjavascriptの関数が変態すぎるをみてください。

ということは、myAlert=alert;のようにするとalertのエイリアスができます。使い方は普通のalert同様myAlert("ok")でOKです。解決してしまいました。

()ってなに?

でも疑問ありませんか? わたしはあります。alert()のかっことはなんでしょう。そこで調べてみたら、()は関数を実行するもののようです。だから、myAlert = alert() のようにはできないようです。そもそもこれだと関数の戻り値を代入してますよね(ちなみにreturnが設定されていないもしくはreturnだけで戻り値がない場合はundefinedが返されるようです)。

追記:

上のただ単に代入する方法では実は不備があります。たとえば log = console.logとすると動きません。これはどうやら内部処理で this が使われていることが原因のようです。このようにして代入してしまいますと、 this が変わってしまいます。だからこれが動くようにするにはlog = console.log.bind(console)とする必要があります( .bind()は使えない場合もあるので適当なunderscoreのようなライブラリの.bind()関数を使うことをおすすめします)。.bind()は引数を関数のコンテキストに固定します。これでlog('hoge')が動くようになります。

終わりに

いままでもっと関数を短く書きたいと思ってた人、多かったのではないでしょうか?この記事がそんなひとの手助けになれたら幸いです。