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

var self = this;

                               btn.addEventListener( "click", function(){
                                   // ..
                                   self.makeRequest(..);
                               }, false );
                           }
                     };

                 这就更恶心了。


                            关于 this 绑定规则和陷阱的更多信息,参见本系列《你不知道的 JavaScript
                           (上卷)》第二部分的 1~2 章。


                 好,那么所有这些又和简洁方法有什么关系呢?回想一下我们的 something(..) 方法定义:

                     runSomething( {
                         something: function something(x,y) {
                             // ..
                         }
                     } );

                 这里的第二个 something 提供了一个超级方便的词法标识符,总是指向这个函数本身,为
                 我们提供了一个完美的用于递归、事件绑定 / 解绑定等的引用——不会和 this 纠缠也不需
                 要并不可靠的对象引用。

                 非常棒!

                 所以,现在我们可以把这个函数引用重构为下面的 ES6 简洁方法形式:

                     runSomething( {
                         something(x,y) {
                             if (x > y) {
                                 return something( y, x );
                             }

                             return y - x;
                         }
                     } );

                 第一眼看上去很好,但是这段代码会崩溃。return something(..) 调用将找不到 something
                 标识符,因此会得到一个 ReferenceError。这是为什么呢?

                 前面的 ES6 代码片段会被解释为:

                     runSomething( {
                         something: function(x,y){
                             if (x > y) {

                                                                                  语法   |   93

                                图灵社区会员 avilang(1985945885@qq.com) 专享 尊重版权
   111   112   113   114   115   116   117   118   119   120   121