2013年03月15日

JavaScriptのクイズ

会社で同僚に出したクイズです。ちょっとだけ罠入り。
どの順番で何が出力されるかな。

posted by 膳 at 14:27| Comment(0) | TrackBack(0) | JavaScript

2011年09月28日

JavaScriptでbound method

Function内のthisの値は呼び出し方によって変化するので、下記コードは意図通りに動かない。
//クラス定義
function Hoge() {
    this.propertyA = 1;
}
Hoge.prototype = {
    methodA: function() {
        return this.propertyA;
    }
};

//callback関数を受け取る適当な関数
function fuga(callback) {
    return callback();
}

var hoge = new Hoge();
console.log(fuga(hoge.methodA));    // undefined が出力されてしまう

pythonのbound methodみたいに、インスタンス生成時にthisの値を束縛してくれればインスタンスメソッドの使い勝手がよくなりそうなので、クラス定義を次のように書き換えてみた。
function Hoge() {
    this.propertyA = 1;
    for (var property in this) {
        if (typeof this[property] == 'function') {
            this[property] = (function(context, method) {
                return function() {
                    return method.apply(context, arguments);
                };
            })(this, this[property]);
        }
    }
}
Hoge.prototype = {
    methodA: function() {
        return this.propertyA;
    }
};

var hoge = new Hoge();
console.log(fuga(hoge.methodA));    // ちゃんと 1 が出力される
var a = hoge.methodA;
console.log(a());     // これでも 1 が出力される。

実際のプロダクトではこんなことしないで引数渡すときにjQuery.proxy使うけど。
posted by 膳 at 21:43| Comment(0) | TrackBack(0) | JavaScript

2011年05月05日

JavaScriptで名前空間2

二年前に、JavaScriptで名前空間という記事を書いたんですが、最近は名前空間の定義方法を変えています。

以前は、window.jp.zenbo というように、ドメイン毎にオブジェクトを用意していたのですが、同じ方法で名前空間定義する外部スクリプトと window.jp が競合しそうで怖いので(もしくはサイト側のJSが var jp, com と定義する確率がわずかにある)、window['jp.zenbo'] といった風に競合しないであろうグローバルな名前空間一つだけ用意するようにしています。

// 昔の定義方法
if (typeof window['jp'] === 'undefined') window['jp'] = {};
if (typeof window['jp']['zenbo'] === 'undefined') window['jp']['zenbo'] = {};

// 今の定義方法
if (typeof window['jp.zenbo'] === 'undefined') window['jp.zenbo'] = {};

window['jp.zenbo']以下は俺俺ルールで好きに使っておk。
名前空間は被らないようにするのが第一の目的なので、ドット付きの変数名ならまず大丈夫ではないでしょうか。
本当に大丈夫かどうか心配なので、何か問題あったら教えて下さい。
posted by 膳 at 12:46| Comment(0) | TrackBack(0) | JavaScript

2011年02月08日

ATOK2011を窓から投げ捨てたくなったけど思いとどまった

定額制にしているATOKが2011にアップデートできるようなのでインストールしてみたら、ATOKパレットが言語バーと統一していた。
ATOK2011_before.png
以前はタスクトレイに収納して使っていたので、1アイコンでスッキリ表示できていたのにこんな感じで主張しまくる。

ATOK2011キタ|ぶにゃの日記
http://ameblo.jp/samael21/entry-10794097751.html

上記のサイトを見つけて元に戻せたけど、分かり辛すぎるだろう、ATOK……。
ATOK2011_after.png

それから、引き継ぎ設定をしくじったせいか、「aikon」と入力した状態で変換かけると「n」が「ん」と認識されないようになった。「……」を「てん」で登録しているのに「ten」では「テン」に変換できても「……」が候補に出ない。もう勘弁してくれATOK(ノA`)
「Nの過不足を修正する」をONにしているのになんで不足時に修正してくれないんだ……。

追記:
[ローマ字立ち直り]→[する]で問題解決。
デフォの引き継ぎ設定は全部ONにしてくれ。もう疲れた。
タグ:ATOK
posted by 膳 at 22:35| Comment(0) | TrackBack(0) | 雑記

2010年09月08日

PHPの罠



上記のコードだと、
Hoge#unk
が出力される。

selfは継承ガン無視でメソッドが定義されたクラスに束縛される。
staticメソッド内から別のstaticメソッド呼ぶなよハゲという思想なんだろうか。
その思想自体にいちゃもん付ける気はないけど、だったらselfなんて使い勝手良さそうなキーワードなくして欲しい。
PHP5.3以降ならば回避策があって、selfじゃなくstaticを使用すると実行時のクラスを参照してくれる。
selfはいらない子。



これで
Fuga#unk
が出力される。

また一つバッドノウハウが増えた。
PHPは直感に反する罠がたくさんあって、それぞれ知識として覚え続けてなきゃいけないので辛いです。
頭のいい人以外向かない言語。
posted by 膳 at 00:38| Comment(0) | TrackBack(0) | PHP

2010年01月11日

掃除できないスイッチ・続

ええ、掃除してないんです。前回から。
自分でもビックリな約2年間です。
あの後掃除友達が忙しくなってしまったので依頼することができなくなり、掃除できないスイッチがオフのままでした。
掃除していないとはいっても完全にしてないわけではなく、キッチン周りや目につくところだけは適当にやっていたので、精神的には大丈夫だったんですが、目に見えないそこかしこにホコリが溜まりまくって健康的に危険な状態にありました。(自分の部屋の中に「安全ゾーン」と「腐海ゾーン」があって平気な精神状態がまともかどうかは分かりませんが……)
そんな状態で友達と自分の家で呑んでいたら、急にやる気を出してくれたようで、早速次の日掃除してくれることになりました。持つべきものは友達です……家事が得意な。
翌日朝から行動開始し、例によって掃除だけじゃ済まずに模様替え&カーペット・布団・つっかえ棒・ラック・蛍光灯買い換えと大がかりになっていき、丸一日かかって作業を終えました。
部屋は見違えるほど綺麗になり、達成感に二人で酔いしれていたんですが、ふと危険な仮説を思いつきました。
毎度毎度大がかりな掃除をすることで、掃除=ビッグプロジェクトという刷り込みが自分の中にされてしまい、一人で掃除しようとする切っ掛けを失っているんじゃないだろうか……。
掃除を手伝ってもらう以前から自発的に掃除していなかったので、どちらにせよ結論は一緒ですが、相乗効果でもうスイッチが固定されて動かないような気がします。友達が定期的に掃除してくれることを部屋の隅でガタガタ震えながら祈り続けたいと思います。
posted by 膳 at 12:47| Comment(0) | TrackBack(0) | 雑記

2009年08月16日

NoSquintをアンインストールするとマウスホイールで文字サイズ変更できなくなる

というわけで、Firefoxのロケーションバーにabout:configと入力して、mousewheel.withcontrolkey.actionの値を3に戻せば直る。
Ctrl+ホイールでの文字サイズ変更機能をNoSquintが持っているせいか、拡張が有効の場合は0以外に設定できなくてアンインストール(or無効)にすると5に設定されるみたい。副作用怖い。
posted by 膳 at 02:46| Comment(0) | TrackBack(0) | 雑記

2009年08月02日

2009年07月の残業時間数

7月の残業時間数、計10h

南米行きたい。
ブラジルでも可。
posted by 膳 at 14:14| Comment(0) | TrackBack(0) | 残業時間数メモ

2009年06月の残業時間数

6月の残業時間数、計4h

動(以下愚痴略
posted by 膳 at 14:14| Comment(0) | TrackBack(0) | 残業時間数メモ

産経ニュースのキーワードポップアップを無効にするgreasemonkey

ついカッとなって産経ニュースのキーワードポップアップを無効にするgreasemonkey書きました。
onmouseは慎重に使うべきだと思う。

EraseSankeiKeyword ver1.0.0.0
■ダウンロード

posted by 膳 at 14:06| Comment(1) | TrackBack(0) | JavaScript