当对一个函数递归或者栈追踪的时候,就会觉得函数名称是多么的重要。否则满屏的anonymous
分分钟想打人。今天阅读《你不知道的JavaScript》(下卷)的时候,发现作者有对name进行总结,于是在这里记录一下,以便加深记忆,日后查阅。
下面是ES6中名称推导的其他几种形式:
(function(){}); // name: ""(空字符串)
(function*(){}); // name: ""
window.foo = function(){}; // name: ""
class Awesome {
constructor() {} // name: Awesome
funny() {} // name: funny
}
var c = class Aewsome {}; // name: Aewsome
var o = {
foo() {}, // name: foo
*bar() {}, // name: bar
baz: () => {}, // name: baz
bam: function(){}, // name: bam
get qux() {}, // name: get qux
set fuz() {}, // name: set fuz
["b" + "iz"]: function(){}, // name: biz
[Symbol("buz")]: function(){} // name: [buz]
};
var x = o.foo.bind(o); // name: bound foo
(function(){}).bind(o); // name: bound
export default function() {}; // name: default
var y = new Function(); // name: anonymous
默认情况下,name属性不可写,但是可以配置。如果需要,可使用Object.defineProperty()
手动修改。