在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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(1)
Dec 23 Javascript
js cookies实现简单统计访问次数
Nov 24 Javascript
高效率JavaScript编写技巧整理
Aug 23 Javascript
Json序列化和反序列化方法解析
Dec 19 Javascript
jQuery插件Tmpl的简单使用方法
Apr 27 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
Nov 17 Javascript
微信小程序入门教程
Nov 18 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
Nov 29 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 jQuery
微信小程序获取手机号授权用户登录功能
Nov 09 Javascript
JavaScript实现的反序列化json字符串操作示例
Jul 18 Javascript
vue项目实现减少app.js和vender.js的体积操作
Nov 12 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
实现树状结构的两种方法
2006/10/09 PHP
php 缩略图实现函数代码
2011/06/23 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
php Session无效分析资料整理
2016/11/29 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
jquery显示和隐藏div特效实例
2013/02/27 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
Python制作豆瓣图片的爬虫
2017/12/28 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
wxPython实现画图板
2020/08/27 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
小学学校评估方案
2014/06/08 职场文书
个人合伙协议书范本
2014/10/14 职场文书
年度考核表个人总结
2015/03/06 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
Go语言怎么使用变长参数函数
2022/07/15 Golang