企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] >[success] # name属性 ~~~ 定义函数有'各种各样'的方式,在 JS 中识别函数就变得很有挑战性。此外,匿名函数表达式的 流行使得 调试有点困难,经常导致'堆栈跟踪难以被阅读与解释'。正因为此, ES6 给所有函数 添加了'name'属性。 ~~~ ~~~ function a() { } let b = function () { } let objFun = { c: () => { } } console.log(a.name) // a console.log(b.name) // b console.log(objFun.c.name) // c ~~~ <br/> >[success] ## name属性特殊情况 ~~~ let doSomething = function doSomethingElse() { } let person = { get firstName() { return '空字符串' }, sayName: function () { console.log(this.name) } } console.log(doSomething.name) // doSomethingElse 因为这个doSomething变量的函数自带名字,所以权重比较高 console.log(person.sayName.name) // sayName let descriptor = Object.getOwnPropertyDescriptor(person, "firstName"); console.log(descriptor.get.name); // "get firstName" 另外2种用'bind'创建的方法,一种是'构造函数'创建的方法 function aa() { } console.log(aa.bind().name) // bound aa console.log(new Function().name) // anonymous ~~~