こちらを参考にjavascriptで実験してみました。
Function.prototype.funcObj = function() { return { valueOf : this } };
var random = function()
{
var res = Math.random();
alert('randomL:'+res);
return res;
}
function add(i, j) {
alert('add');
if(j>0){
return i+j;
}
return j;
}
alert(add(random(), 1));
alert(add(random(), 0));
alert(add(random.funcObj(), 1));
alert(add(random.funcObj(), 0));
普通にrandom()を引数に渡すとadd()の第二引数に関係なく必ずrandom()が実行されますが、random().funcObj()を引数に渡すと先にadd()が呼ばれて第二引数によってはrandom()が実行されないのを確認。
こんな感じでしょうか。
しかし、
Function.prototype.funcObj = function() { return { valueOf : this } };
これがいまいち理解出来ていなくて、連想配列としてvalueOfを誰かが自動的に呼んで、その際に関数を実行させないで、自分のオブジェクトを返すって事でいいのでしょうか。
0 件のコメント:
コメントを投稿