在JavaScript中正确引用bind方法的应用


Posted in Javascript onMay 11, 2015

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

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

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

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

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

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

     这样就不会报错了。

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

Function.prototype.bind = Function.prototype.bind || function(context){
   var _this = this;
   
   return function(){
     _this.apply(context, arguments);
   };
 };

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

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
DD_belatedPNG,IE6下PNG透明解决方案(国外)
Dec 06 Javascript
jQuery+ajax实现无刷新级联菜单示例
May 21 Javascript
Javascript编写2048小游戏
Jul 07 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
Aug 23 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
Aug 16 Javascript
详解Angular路由 ng-route和ui-router的区别
May 22 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
May 27 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
Aug 14 jQuery
纯JS实现出生日期[年月日]下拉菜单效果
Jun 01 Javascript
详解在vue-test-utils中mock全局对象
Nov 07 Javascript
微信小程序监听用户登录事件的实现方法
Nov 11 Javascript
vue使用nprogress加载路由进度条的方法
Jun 04 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
May 11 #Javascript
javascript实现验证IP地址等相关信息代码
May 10 #Javascript
招聘网站基于jQuery实现自动刷新简历
May 10 #Javascript
javascript实现获取字符串hash值
May 10 #Javascript
Javascript实现计算个人所得税
May 10 #Javascript
AngularJS基础知识笔记之表格
May 10 #Javascript
AngularJS基础知识笔记之过滤器
May 10 #Javascript
You might like
php遍历目录viewDir函数
2009/12/15 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
php获取系统变量方法小结
2015/05/29 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
react redux入门示例
2018/04/19 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
python动态网页批量爬取
2016/02/14 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
python实现的自动发送消息功能详解
2019/08/15 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
保安自我鉴定范文
2013/12/08 职场文书
工程承包协议书
2014/04/22 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
2016年元旦寄语
2015/08/17 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏
实战Python爬虫爬取酷我音乐
2022/04/11 Python