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 相关文章推荐
java script编程起步(第三课)
Jan 10 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
Jan 20 Javascript
对之前写的jquery分页做下升级
Jun 19 Javascript
js返回前一页刷新本页重载页面
Jul 29 Javascript
Javascript获取图片原始宽度和高度的方法详解
Sep 20 Javascript
jQuery焦点图轮播效果实现方法
Dec 19 Javascript
AngularJS select设置默认值的实现方法
Aug 25 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
Dec 29 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
Apr 29 Javascript
bootstrap实现嵌套模态框的实例代码
Jan 10 Javascript
如何用JavaScipt测网速
May 09 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中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
PHP数组实例详解
2016/06/26 PHP
PHP对象实例化单例方法
2017/01/19 PHP
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
js中生成map对象的方法
2014/01/09 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
WebPack基础知识详解
2017/01/16 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
python实现的防DDoS脚本
2011/02/08 Python
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
python使用socket创建tcp服务器和客户端
2018/04/12 Python
python3获取url文件大小示例代码
2019/09/18 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
入党积极分子思想汇报
2014/01/02 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
创业计划书之物流运送
2019/09/17 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL