ES6函数名称总结

当对一个函数递归或者栈追踪的时候,就会觉得函数名称是多么的重要。否则满屏的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()手动修改。

    原文作者:坤少卡卡
    原文地址: https://www.jianshu.com/p/5c079a154c07
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞