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 回答