javascript中bind函数的作用实例介绍


Posted in Javascript onSeptember 28, 2014
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
button {background-color:#0f0;}
</style>
</head>
<body>
<button id="button"> 按钮 </button>
<input type="text">
<script>
var button = document.getElementById("button");
button.onclick = function() {
alert(this.id); // 弹出button
};
//可以看出上下文的this 为button
</script>
</body>
</html>

此时加入bind

 var text = document.getElementById("text");

 var button = document.getElementById("button");

 button.onclick = function() {

 alert(this.id); // 弹出button

 }.bind(text);

 //可以看出上下文的this 为button

此时会发现this改变为text

函数字面量里也适用,目的是保持上下指向(this)不变。

var obj = {
color: "#ccc", 
element: document.getElementById('text'),
events: function() {
document.getElementById("button").addEventListener("click", function(e) {
console.log(this);
this.element.style.color = this.color;
}.bind(this))
return this;
},
init: function() {
this.events();
}
};
obj.init();

此时点击按钮text里的字会变色。可见this不为button而是obj。

bind()的方法在ie,6,7,8中不适用,需要扩展通过扩展Function prototype可以实现此方法。

if (!Function.prototype.bind) {

Function.prototype.bind = function(obj) {
var slice = [].slice, args = slice.call(arguments, 1), self = this, nop = function() {
}, bound = function() {
return self.apply(this instanceof nop ? this : (obj || {}),
args.concat(slice.call(arguments)));
};

nop.prototype = self.prototype;

bound.prototype = new nop();

return bound;
};
}

此时可以看到ie6,7,8中也支持bind()。

slice = Array.prototype.slice,
或

array = Array.prototype.slice.call( array, 0 );

将类似数组转换为数组
Javascript 相关文章推荐
浅谈Javascript变量作用域问题
Dec 16 Javascript
JQuery+CSS实现图片上放置按钮的方法
May 29 Javascript
Jsonp post 跨域方案
Jul 06 Javascript
Javascript实现网络监测的方法
Jul 31 Javascript
JS实现弹出居中的模式窗口示例
Jun 20 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
Aug 15 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
Aug 10 Javascript
总结js中的一些兼容性易错的问题
Dec 18 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
Jan 07 Javascript
浅谈Angular HttpClient简单入门
May 04 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
Sep 25 Javascript
js实现移动端tab切换时下划线滑动效果
Sep 08 Javascript
js和jquery如何获取图片真实的宽度和高度
Sep 28 #Javascript
一个jquery实现的不错的多行文字图片滚动效果
Sep 28 #Javascript
IE中getElementsByName()对有些元素无效的解决方案
Sep 28 #Javascript
js propertychange和oninput事件
Sep 28 #Javascript
javascript检测是否联网的实现代码
Sep 28 #Javascript
javascript检测浏览器的缩放状态实现代码
Sep 28 #Javascript
Node.js中使用mongoskin操作mongoDB实例
Sep 28 #Javascript
You might like
PHP新手上路(十)
2006/10/09 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
用JS控制回车事件的代码
2011/02/20 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
使用 NodeJS+Express 开发服务端的简单介绍
2017/04/07 NodeJs
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
python实现小球弹跳效果
2019/05/10 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
苹果音乐订阅:Apple Music
2018/08/02 全球购物
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
信息技术专业个人自我评价
2013/12/11 职场文书
促销活动总结模板
2014/07/01 职场文书