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监测ActiveX控件是否已经安装过的代码
Sep 02 Javascript
js 获取Listbox选择的值的代码
Apr 15 Javascript
Javascript面向对象扩展库代码分享
Mar 27 Javascript
JavaScript使用concat连接数组的方法
Apr 06 Javascript
javaScript中with函数用法实例分析
Jun 08 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
Aug 28 Javascript
莱鸟介绍javascript onclick事件
Jan 06 Javascript
jQuery插件dataTables添加序号列的方法
Jul 06 Javascript
基于Two.js实现星球环绕动画效果的示例
Nov 06 Javascript
详解JS中统计函数执行次数与执行时间
Sep 04 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
Jan 30 Javascript
JavaScript实现文件下载并重命名代码实例
Dec 12 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
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
ES6知识点整理之对象解构赋值应用示例
2019/04/17 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
JavaScript 实现继承的几种方式
2021/02/19 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
Python验证码识别的方法
2015/07/10 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
业务代表的岗位职责
2013/11/16 职场文书
公司活动策划方案
2014/01/13 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
《日月潭》教学反思
2014/02/28 职场文书
上班迟到检讨书
2014/09/15 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
员工工作能力评语
2014/12/31 职场文书
介绍信样本
2015/01/31 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers