在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 相关文章推荐
Js 导出table内容到Excel的简单实例
Nov 19 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
Oct 16 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
Jan 28 Javascript
Bootstrap轮播插件使用代码
Oct 11 Javascript
js实现文字无缝向上滚动
Feb 16 Javascript
jquery版轮播图效果和extend扩展
Jul 18 jQuery
jQuery上传插件webupload使用方法
Aug 01 jQuery
Vue-resource拦截器判断token失效跳转的实例
Oct 27 Javascript
微信小程序wx:for和wx:for-item的用法详解
Apr 01 Javascript
浅谈webpack-dev-server的配置和使用
May 17 Javascript
js array数组对象操作方法汇总
Mar 18 Javascript
微信小程序数据统计和错误统计的实现方法
Jun 26 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过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
PHP7常量数组用法分析
2016/09/26 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
javascript实现连续赋值
2015/08/10 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
javascript input输入框模糊提示功能的实现
2017/09/25 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
python 初始化一个定长的数组实例
2019/12/02 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
.net C#面试题
2012/08/28 面试题
三八妇女节活动总结
2014/05/04 职场文书
置业顾问岗位职责
2015/02/09 职场文书
质检员工作总结2015
2015/04/25 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript
golang为什么要统一错误处理
2022/04/03 Golang
PyTorch中permute的使用方法
2022/04/26 Python