码迷,mamicode.com
首页 > 编程语言 > 详细

如何在JavaScript中正确引用某个方法(bind方法的应用)

时间:2015-05-10 23:57:27      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

     在JavaScript中,方法往往涉及到上下文,也就是this,因此往往不能直接引用,就拿最常见的console.log("info…")来说,避免书写冗长的console,直接用log("info…")代替,不假思索的会想到如下语法:

1 var log = console.log;
2 log("info…");

     很遗憾,运行报错:TypeError: Illegal invocation。

     为啥呢?对于console.log("info…")而言,log方法在console对象上调用,因此log方法中的this指向console对象;而我们用log变量指向console.log方法,然后直接调用log方法,此时log方法的this指向的是window对象,上下文不一致,当然会报错了。

     此时我们可以用bind方法解决这个问题。bind方法允许手动传入一个this,作为当前方法的上下文,然后返回持有上下文的方法,例如:

1 var log = console.log.bind(console);
2 log("info...");

     这样就不会报错了。

     但是,bind方法并不支持ie 8以及更低版本的浏览器,我们完全可以自己实现一个,很简单。

1 Function.prototype.bind = Function.prototype.bind || function(context){
2     var _this = this;
3     
4     return function(){
5         _this.apply(context, arguments);
6     };
7 };

     核心通过apply方法实现,闭包的经典应用。_this指向当前方法,context指向当前方法的上下文,二者均通过闭包访问。

 

如何在JavaScript中正确引用某个方法(bind方法的应用)

标签:

原文地址:http://www.cnblogs.com/iyangyuan/p/4493322.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!