《理解 ES6》阅读整理:函数(Functions)(五)Name Property
2016-10-23 22:08
387 查看
名字属性(The name Property)
在JavaScript中识别函数是有挑战性的,因为你可以使用各种方式来定义一个函数。匿名函数表达式的流行使用导致函数调试困难,在栈信息中难以找出函数名。因为这些原因,ES6为所有函数都增加了名字属性。
选择合适的名字(Choosing Appropriate Names)
在ES6中所有的函数都有一个合适的名字属性。来看下面的例子:
在上面的代码中,doSomething是一个函数声明,name的值为doSomething。而doAnotherThing被赋值为一个匿名函数,name为doAnotherThing。
特殊情况下的名字属性(Special Cases of the name Property)
函数声明和函数表达式的name属性是容易知道的,ES6确保所有的函数都有合适的名字。看下面的代码:
上面的例子中,doSomething.name的值为doSomethingElse,因为函数表达式有name属性,并且函数表达式的name属性优先级高于变量的name属性。person.sayName.name的值为sayName,这个容易理解。然后person.firstName是一个getter函数,为了跟普通函数区分开,加了一个get前缀。如果是setter函数,那么要加上一个set前缀。还有几种其他特殊情况:
用bind创建的函数的名字属性以bound开头,而用Function构造函数创建的函数的名字属性为anonymous。
函数的名字属性主要用来调试的,不要试图用name属性去访问函数。
在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)(六)Purpose of Functions
- 《理解 ES6》阅读整理:函数(Functions)(四)Arrow Functions
- 《理解 ES6》阅读整理:函数(Functions)(八)Tail Call Optimization
- 《理解 ES6》阅读整理:函数(Functions)(七)Block-Level Functions
- 《理解 ES6》阅读整理:块绑定(Block Binding)
- of_find_property(np, name, lenp)等函数的理解
- 深入理解断言assert()函数(待整理)
- 对new functionName()定义一个函数的理解
- 深入理解JavaScript系列(15):函数(Functions)
- 第十四周 程序阅读,理解虚函数与纯虚函数
- 对于linux下system()函数的深度理解(整理)
- 深入理解JavaScript系列(15):函数(Functions)
- 对new functionName()定义一个函数的理解
- 深入理解JavaScript系列(15) 函数(Functions)
- 对于linux下system()函数的深度理解(整理)
- 第十二周项目 1 阅读程序(理解函数的默认参数)
- 对于linux下system()函数的深度理解(整理)
- poj 2752 Seek the Name, Seek the Fame(理解KMP的失配函数!) .
- 深入理解JavaScript系列(15):函数(Functions)
- 对于linux下system()函数的深度理解(整理)