《理解 ES6》阅读整理:函数(Functions)(五)Name Property
名字属性(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属性去访问函数。
《理解 ES6》阅读整理:函数(Functions)(五)Name Property的更多相关文章
- linux内核设计与实现一书阅读整理 之第五章
CHAPTER 5 系统调用 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进 ...
- 《理解 ES6》阅读整理:函数(Functions)(一)Default Parameter Values
对于任何语言来说,函数都是一个重要的组成部分.在ES6以前,从JavaScript被创建以来,函数一直没有大的改动,留下了一堆的问题和很微妙的行为,导致在JavaScript中使用函数时很容易出现错误 ...
- 深入理解ES6箭头函数中的this
简要介绍:箭头函数中的this,指向与一般function定义的函数不同,比较容易绕晕,箭头函数this的定义:箭头函数中的this是在定义函数的时候绑定,而不是在执行函数的时候绑定. 1.何为定义时 ...
- 《javascript个人理解,个人整理。》
万事开头难. 本人做前端工程师,已几年,没有特别大的,已文字方式去做总结. 前段时间,早已经想好,但是迟迟没有去下笔!好在现在陆陆续续的写下去. 我知道这是一个很大的工程,但是我还是想做下去,不为别的 ...
- es6从零学习(五):Module的语法
es6从零学习(五):Module的语法 ES6 模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量 一:es6模块化和 CommonJS 和 AMD 模块 (运行 ...
- asp.net MVC helper 和自定义函数@functions小结
asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...
- asp.net MVC 自定义@helper 和自定义函数@functions小结
asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...
- ES6 入门系列 - 函数的扩展
1函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console.log( ...
- 【读书笔记】【深入理解ES6】#3-函数
函数形参的默认值 ES6中的默认参数值 function makeRequest(url, timeout = 2000, callback = function() {}) { } 可以为任意参数指 ...
随机推荐
- node.js 基础学习笔记3 -express
1.工作原理 当通过app.js建立的服务器时,会看到一个简单的页面.返回页面时,浏览器会向服务器发送请求.app会解析请求的路径,调用相应的逻辑,调用对应的视图模板,传递对象数值,最终生成HTML页 ...
- ES6初学习
建议下一个chrome的插件Scratch.js[https://chrome.google.com/webstore/detail/alploljligeomonipppgaahpkenfnfkn] ...
- Java的二维数组的应用及杨辉三角的编写
(1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个 ...
- 整理分享C#通过user32.dll模拟物理按键操作的代码
对系统模拟按键方面的知识和按键映射代码做了一下梳理,在这里分享出来,适用于开发自动操作工具和游戏外挂. 主代码: public const int KEYEVENTF_EXTENDEDKEY = 0x ...
- 为何jquery动态添加的input value无法提交到数据库?【坑】
有两个输入框,我想让第一个输入框失去焦点以后,第二个输入框自动获取第一个输入框的value为默认值,jquery代码如下,可以正常显示,但是用PHP提交数据,并插入数据库的时候确实空值,尚未查找到原因 ...
- AspJpeg使用 .
下载ASPJpeg的bll库,引用 一.为图片添加水印//实例化组件ASPJPEGLib.IASPJpeg objJpeg = new ASPJPEGLib.ASPJpeg();//打开源图片文件ob ...
- 移动APP开发使用什么样的原型设计工具比较合适?
原型设计工具有Axure,Balsamiq Mockups,JustinMind,iClap原型工具,等其他原型工具.其中JustinMind比较适合APP开发使用. JustinMind可以输出Ht ...
- WinForm开发之取送货管理1
一.取送货管理项目需求 该系统的业务背景如下:客户是一个针织半成品生产加工作坊,有很多生产加工人员从客户工厂那里取走半成品,加工成成品后送回来.客户根据加工每种半成品的加工单价和完成数量,付费用给生产 ...
- [转]protobuf-2.5.0.tar.gz的下载与安装
protobuf-2.5.0.tar.gz的下载与安装 原文地址:http://blog.csdn.net/tdmyl/article/details/31811317 版权声明:本文为博主原创文章, ...
- 深入理解Memcache原理 [转]
1.为什么要使用memcache 由于网站的高并发读写需求,传统的关系型数据库开始出现瓶颈,例如: 1)对数据库的高并发读写: 关系型数据库本身就是个庞然大物,处理过程非常耗时(如解析SQL语句,事务 ...