名字属性(The name Property)

在JavaScript中识别函数是有挑战性的,因为你可以使用各种方式来定义一个函数。匿名函数表达式的流行使用导致函数调试困难,在栈信息中难以找出函数名。因为这些原因,ES6为所有函数都增加了名字属性。

选择合适的名字(Choosing Appropriate Names)

在ES6中所有的函数都有一个合适的名字属性。来看下面的例子:

function doSomething() {//...
}var doAnotherThing = function() {//...
}console.log(doSomething.name);  //  doSomething
console.log(doAnotherThing.name);  //  doAnotherThing

在上面的代码中,doSomething是一个函数声明,name的值为doSomething。而doAnotherThing被赋值为一个匿名函数,name为doAnotherThing。

特殊情况下的名字属性(Special Cases of the name Property)

函数声明和函数表达式的name属性是容易知道的,ES6确保所有的函数都有合适的名字。看下面的代码:

var doSomething = function doSomethingElse() {//...
};var person = {get firstName() {return "Zakas"},sayName: function() {console.log(this.name);},
};console.log(doSomething.name);  //  doSomethingElse
console.log(person.sayName.name);  //  sayName
console.log(person.firstName.name);  //  get firstName

上面的例子中,doSomething.name的值为doSomethingElse,因为函数表达式有name属性,并且函数表达式的name属性优先级高于变量的name属性。person.sayName.name的值为sayName,这个容易理解。然后person.firstName是一个getter函数,为了跟普通函数区分开,加了一个get前缀。如果是setter函数,那么要加上一个set前缀。还有几种其他特殊情况:

var doSomething = {//...
};console.log(doSomething.bind().name);  //  bound doSomething
console.log((new Function()).name);  //  anonymous 

用bind创建的函数的名字属性以bound开头,而用Function构造函数创建的函数的名字属性为anonymous。

函数的名字属性主要用来调试的,不要试图用name属性去访问函数。

转载于:https://www.cnblogs.com/xfshen/p/5991136.html

《理解 ES6》阅读整理:函数(Functions)(五)Name Property相关推荐

  1. Spark SQL 内置函数(五)Aggregate Functions(基于 Spark 3.2.0)

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  2. 机器阅读理解MRC论文整理

    机器阅读理解MRC论文整理 最近发现一篇机器阅读理解整理的博客机器阅读理解整理整理于2020年 论文代码查找网站: https://dblp.uni-trier.de/db/conf/acl/acl2 ...

  3. 了解ES6 The Dope Way第五部分:类,转译ES6代码和更多资源!

    by Mariya Diminsky 通过玛丽亚·迪明斯基(Mariya Diminsky) 了解ES6 The Dope Way第五部分:类,转译ES6代码和更多资源! (Learn ES6 The ...

  4. [译]深入ES6之箭头函数

    原作者:江凌 箭头一族缺少的家庭成员 在JavaScript出现以来,箭头(Arrow)就一直是其语法的一部分.一般来说,JavaScript教程的第一篇就会讲如何在HTML中插入箭头括号来作为注释, ...

  5. NLP-阅读理解:“阅读理解”综述(Machine Reading Comprehension, MRC)【完形填空、多项选择、抽取式(答案片段抽取)、生成式(自由作答)】《机器阅读理解数据集》

    <原始论文:Neural Machine Reading Comprehension: Methods and Trends> 一.阅读理解概述 所谓的机器阅读理解(Machine Rea ...

  6. ES6 ~ ES11整理

    目录 一.ESMAScript相关介绍 1.1 什么是ECMA 1.2 什么是ESMAScript 1.3 什么是ECMA-262 1.4 ECMA-262 l历史 1.5 谁在维护   ECMA-2 ...

  7. 【ES6】Generator函数详解

    [ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...

  8. 深度学习论文阅读图像分类篇(五):ResNet《Deep Residual Learning for Image Recognition》

    深度学习论文阅读图像分类篇(五):ResNet<Deep Residual Learning for Image Recognition> Abstract 摘要 1. Introduct ...

  9. 文献—Emergent simplicity in microbial community assembly--论文全过程详细阅读整理与翻译

    本文对Emergent simplicity in microbial community assembly-- 论文全过程详细阅读整理 原始文献Goldford J E , Lu N , Bajic ...

最新文章

  1. MATLAB神经网络样本数量太大,MATLAB搭建bp神经网络的误差特别大,但R2的值也大,求解帮我看看我的网络哪里出问题了...
  2. npm安装出错Unexpected end of input at 1:2307
  3. cad 快捷键命令大全
  4. 年龄估计bridgeNet
  5. Vector Clock理解
  6. Android杂谈--通过DDMS实现电脑与Android设备(如手机,平板)的网络连接、截图...
  7. 【Linux基础】Linux的5种IO模型详解
  8. Markdown_LaTex_极限符号
  9. 切换图片 ImageSwitcher
  10. opencv配置原理
  11. 转行学AI,如何选择适合的方向
  12. MyEclipse_8.5+flex_4+Blazeds配置
  13. 照片浏览器_2020护考报名失败!只因照片太大瞎忙乎三小时...
  14. 将VMware迁移到阿里云分几步?!
  15. Unity中文API文档离线下载
  16. ios共享账号公众号_新增iOS应用账号共享03
  17. 利用Rstudio对考试成绩进行数据分析
  18. 如何使用 JS 实现带字母的导航城市列表,以及城市搜索
  19. Win10安装-我们无法创建新的分区,也找不到现有的分区
  20. VS2017 和 Matlab R2016b 混合编程配置问题解决!

热门文章

  1. ios14的蓝牙弹窗_iOS14来了,总结一下给你带来了哪些最实用的功能
  2. vs code 开发企业级python_基于VS Code配置Python开发环境
  3. yolov3权重_目标检测之 YOLOv3 (Pytorch实现)
  4. ccs船级社认证费用多少_亚马逊UL507认证是什么?办理费用是多少?
  5. java 类方法应用题,java方法使用
  6. tp5缓存在html怎么用,tp5.1缓存Cache的使用
  7. 程序员吐槽_阿里程序员回老家被哥们吐槽,破IT就破IT,还阿里巴巴
  8. pcb过孔与电流对照一览表_PCB设计项目能不能成功,这个因素占了30%
  9. 在react里写原生js_小程序原生开发与第三方框架选择
  10. cpu风扇转速慢_cpu风扇简介有哪些?cpu风扇选购技巧介绍_