Subscribed unsubscribe Subscribe Subscribe

枕を欹てて聴く

香炉峰の雪は簾を撥げて看る

Function#name

知らなかったのだけれど, こんなのできるんですね. 普通にerror stackをparseしてやろうとか思ってしまっていた.

function debug(){
  var funcname;
  if(arguments.callee.caller){
    funcname = arguments.callee.caller.name;
  }
  if(!funcname)
    funcname = "anonymous function";
  console.log('"'+funcname+'": '+Array.prototype.slice.call(arguments).join(', '));
}

Function.name - JavaScript | MDN

nameはFunctionExpressionかもしくはFunctionDeclarationのときに指定したIdentifierがそれに当たる.

// FunctionExpressionのIdentifier指定のものをnot_nameに代入
var not_name = function this_is_func_name(){ };
console.assert(not_name.name === 'this_is_func_name');

// FunctionDeclaration Identifier指定
function this_is_func_name_2(){}
console.assert(this_is_func_name_2.name === 'this_is_func_name_2');

Fx(TraceMonkey), V8, Operaは動く. Function#nameは仕様にないので, JavaScriptCoreでは動かない. JavaScriptCoreではerrorのstackでもparseしようかと思ったのですが, Error#stackもなかった... 残念.

Remove all ads