0

これは、ES2015 で名前付きアロー関数を作成するにはどうすればよいですか? のバリエーションです。質問ですが、具体的な目的は、関数オブジェクトに名前を付けて、Chrome CPU プロファイラーで使用できるようにすることです。

私は次のことを試しました:

let unnamed;

unnamed = () => {

};

Object.defineProperty(unnamed, 'name', {
    value: 'XXX'
});

Object.defineProperty(unnamed.constructor, 'name', {
    value: 'YYY'
});

Object.defineProperty(unnamed, 'displayName', {
    value: 'ZZZ'
});

console.log('unnamed.name', unnamed.name);
console.log('unnamed.constructor.name', unnamed.constructor.name);
console.log('unnamed.displayName', unnamed.displayName);

export default unnamed;

しかし、私が何をしても、CPUプロファイラーはそれを(anonymous function).

興味深いことに、エラーをスローすると、スタック トレースはdisplayNameプロパティを使用します。

エラースタック

4

1 に答える 1

1

CPU プロファイラーは、displayName または Function.name を使用しません。これには別の問題があります: https://code.google.com/p/chromium/issues/detail?id=559532

スタック トレース関数の名前解決アルゴリズムの場合、リストから最初に定義されたプロパティを使用します: displayName、Function.name、V8 関数の推定名。

于 2016-02-03T01:34:12.490 に答える