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 相关文章推荐
JS 面向对象的5钟写法
Jul 31 Javascript
各情景下元素宽高的获取实现代码
Sep 13 Javascript
file模式访问网页时iframe高度自适应解决方案
Jan 16 Javascript
异步动态加载js与css文件的js代码
Sep 15 Javascript
js判断鼠标左、中、右键哪个被点击的方法
Jan 27 Javascript
jQuery动画与特效详解
Feb 01 Javascript
JavaScript获取两个数组交集的方法
Jun 09 Javascript
自动适应iframe右边的高度
Dec 22 Javascript
微信小程序渲染性能调优小结
Jul 30 Javascript
一篇文章带你浅入webpack的DLL优化打包
Feb 20 Javascript
基于JavaScript获取url参数2种方法
Apr 17 Javascript
js异步接口并发数量控制的方法示例
Nov 22 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 生成饼图 三维饼图
2009/09/28 PHP
PHP实现删除非站内外部链接实例代码
2014/06/17 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
Python装饰器原理与用法分析
2018/04/30 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
Python进行特征提取的示例代码
2020/10/15 Python
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
营业员个人总结的自我评价
2013/10/25 职场文书
优质服务演讲稿
2014/05/14 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
OpenCV-Python实现油画效果的实例
2021/06/08 Python
python基础之类属性和实例属性
2021/10/24 Python