Page 244 - 你不知道的JavaScript(下卷)
P. 244

如果函数设定了 name 值,那么这个值通常也就是开发者工具中栈踪迹使用的
                            名称。



                 推导

                 对于没有词法名称的函数,name 属性是怎样的呢?

                 在 ES6 中,现在已经有了一组推导规则可以合理地为函数的 name 属性赋值,即使这个函
                 数并没有词法名称可用。

                 考虑:

                     var abc = function() {
                         // ..
                     };

                     abc.name;               // "abc"
                 如果给了这个函数一个词法名称,比如 abc =  function def()  { .. },那么 name 属性当
                 然就是 "def"。而如果没有词法名称的话,直觉上看似乎名称为 "abc" 比较合理。

                 下面是 ES6 中名称推导(或者没有名称)的其他几种形式:

                     (function(){ .. });                       // name:
                     (function*(){ .. });                      // name:
                     window.foo = function(){ .. };            // name:

                     class Awesome {
                         constructor() { .. }                  // name: Awesome
                         funny() { .. }                        // name: funny
                     }

                     var c = class Awesome { .. };             // name: Awesome

                     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

                                                                               元编程   |   221

                                图灵社区会员 avilang(1985945885@qq.com) 专享 尊重版权
   239   240   241   242   243   244   245   246   247   248   249