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计数器代码
Nov 04 Javascript
jQuery选择没有colspan属性的td的代码
Jul 06 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
Dec 10 Javascript
使用javascript获取flash加载的百分比的实现代码
May 25 Javascript
jquery 模板的应用示例
Nov 12 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
Nov 26 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
Dec 10 Javascript
利用javascript打开模态对话框(示例代码)
Jan 11 Javascript
AngularJS表达式讲解及示例代码
Aug 16 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
Sep 16 Javascript
Postman参数化实现过程及原理解析
Aug 13 Javascript
vue实现前端列表多条件筛选
Oct 26 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
php删除数组元素示例分享
2014/02/17 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
学习python类方法与对象方法
2016/03/15 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
Python Flask基础教程示例代码
2018/02/07 Python
python操作excel的方法
2018/08/16 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
error和exception有什么区别
2012/10/02 面试题
Python文件操作的面试题
2013/06/22 面试题
自我评价中英文语句
2013/11/30 职场文书
《小池塘》教学反思
2014/02/28 职场文书
cf收人广告词大全
2014/03/14 职场文书
毕业寄语大全
2014/04/09 职场文书
求职个人评价范文
2014/04/09 职场文书
贷款担保申请书
2014/05/20 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
Python基础之条件语句详解
2021/06/16 Python