在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 globalStorage类代码
Jun 04 Javascript
javaScript 利用闭包模拟对象的私有属性
Dec 29 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
Feb 10 Javascript
求数组最大最小值方法适用于任何数组
Aug 16 Javascript
Jquery异步提交表单代码分享
Mar 26 Javascript
AngularJs Dependency Injection(DI,依赖注入)
Sep 02 Javascript
javascript中的replace函数(带注释demo)
Jan 07 Javascript
Vue封装的组件全局注册并引用
Jul 24 Javascript
微信小程序实用代码段(收藏版)
Dec 17 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
May 27 Javascript
浅谈JS for循环中使用break和continue的区别
Jul 21 Javascript
最新最全的手机号验证正则表达式
Feb 24 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水印
2007/03/16 PHP
初品cakephp 入门基础
2012/02/16 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
vue项目实现多语言切换的思路
2020/09/17 Javascript
Python调用命令行进度条的方法
2015/05/05 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
python 自动去除空行的实例
2018/07/24 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
python向图片里添加文字
2019/11/26 Python
如何表示python中的相对路径
2020/07/08 Python
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
保险公司演讲稿
2014/09/02 职场文书
升国旗演讲稿
2014/09/05 职场文书
苏州园林导游词
2015/02/03 职场文书
MongoDB支持的索引类型
2022/04/11 MongoDB