JavaScript: 関数の追跡

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JavaScript: 関数の追跡

IT戦記: JavaScript の関数を「引数そのまま返す化」
404 Blog Not Found: 関数をtraceする

この二つのブログには本当にお世話になっているんだが、相変わらずすごい。っていうか、よくこんなおもしろいことを思いつくなあ。

引数そのまま返す化

IT戦記

alertだけ

function hoge() {
    // ...略...
    var result = fuga();
    alert(result);
    return result; 
}

alert + そのまま返す化

function hoge() {
    // ...略...
    return alert.s(fuga()); 
}

確かにすげぇ便利だ。

でも、loggingに目的を限定してしまえば↓だけでもよさそうな気がしないでもない。

function log(t) {
    alert(t);
    return t;
}

function hoge() {
    //...略...
    return log(fuga());
}

log()の実装しだいで色々な動きが実現できるし、書くコードの量減るし。

まぁ、こう書いちゃうとすごく普通のloggingになっちゃう。引数そのまま返す化のいいところは、処理の流れに影響を与えないままに、好きな処理を埋め込めるってことなのにね。

関数trace

404 Blog Not Found

function add(x,y){ return x + y }
add = add.trace('add');
add(1,1);

↑のコードで、alert('add(1, 1) = 2');がついでに呼び出されるんですよね。これもまたすごい。

ただ、Function.prototype.traceの中の10行目で、

retval = self.apply(null, arguments);

と、やってしまっているので、オブジェクトのメソッドをtraceしようとするとうまくいきません。

var obj = {
    field: 'Hello!',
    method: function() {
        return this.field;
    }
}

obj.method = obj.method.trace('method');
obj.method();    /* method() = undefined */

何とかなりませんかね?trace()に結構たくさん引数を渡したりしてあげないといけなさそうで大変そうです。

スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/8-465710e7

トラックバック

javascript - 関数をtraceする
amachangのコメントを受けて追記JavaScript: 関数の追跡 - 文系大学的IT系の悲哀からのTBを受けて追記書き換えめんどいー。IT戦記 - JavaScript の関数を「引数そのまま返す化」alertだけalert(hoge);hoge.method();改行めんどいー。alert + そのまま....
  • 2007-05-19
  • 発信元: 404 Blog Not Found

コメント

trace関数の方では
trace("method", obj)
でうまく行くと思うのですが。

prototype版の方も、

obj.method = obj.method.trace();

でOKのはず。
  • 2007-05-19
  • by 弾
  • id:-
あああ、勘違いしてました。記事の方を直しました。TBありがとうございました。

Dan the Man to Err
  • 2007-05-19
  • by 弾
  • id:-
nullをthisにするだけで治ってますね。すごいです。もう少し勉強したいと思います。
  • 2007-05-20
  • by Lios K
  • id:-

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。