Page 166 - Node.js开发指南
P. 166

附录 A  JavaScript 的高级特性    159


                     }                                                                                1
                   };

                   var foo = {
                     name: 'foobar'
                   };
                                                                                                      2
                   foo.func = someuser.func;
                   foo.func(); // 输出 foobar

                   foo.func1 = someuser.func.bind(someuser);
                                                                                                      3
                   foo.func1(); // 输出 byvoid

                   func = someuser.func.bind(foo);
                   func(); // 输出 foobar

                                                                                                      4
                   func2 = func;
                   func2(); // 输出 foobar
                   上面代码直接将 foo.func 赋值为 someuser.func,调用 foo.func() 时,this指
               针为 foo,所以输出结果是 foobar。foo.func1 使用了 bind 方法,将 someuser 作
               为this指针绑定到 someuser.func,调用 foo.func1() 时,this指针为 someuser,                            5
               所以输出结果是 byvoid。全局函数 func 同样使用了 bind 方法,将 foo 作为 this 指
               针绑定到 someuser.func,调用 func() 时,this 指针为 foo,所以输出结果是 foobar。
               而 func2 直接将绑定过的 func 赋值过来,与 func 行为完全相同。
                                                                                                      6
                   3. 使用 bind 绑定参数表
                   bind 方法还有一个重要的功能:绑定参数表,如下例所示。


                   var person = {
                     name: 'byvoid',                                                                  7
                     says: function(act, obj) {
                       console.log(this.name + ' ' + act + ' ' + obj);
                     }
                   };
                                                                                                      8
                   person.says('loves', 'diovyb'); // 输出 byvoid loves diovyb

                   byvoidLoves = person.says.bind(person, 'loves');
                   byvoidLoves('you'); // 输出 byvoid loves you
                                                                                                      9
                   可以看到,byvoidLoves 将  this  指针绑定到了 person,并将第一个参数绑定到
               loves,之后在调用 byvoidLoves 的时候,只需传入第三个参数。这个特性可以用于创建
               一个函数的“捷径”,之后我们可以通过这个“捷径”调用,以便在代码多处调用时省略重
               复输入相同的参数。                                                                              10
   161   162   163   164   165   166   167   168   169   170   171