当对一个函数递归或者栈追踪的时候,就会觉得函数名称是多么的重要。否则满屏的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: Aewsomevar 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: boundexport default function() {}; // name: defaultvar y = new Function(); // name: anonymous
默认情况下,name属性不可写,但是可以配置。如果需要,可使用Object.defineProperty()
手动修改。
作者:坤少卡卡
链接:https://www.jianshu.com/p/5c079a154c07