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滑动门代码
Dec 19 Javascript
JQuery实现动态表格点击按钮表格增加一行
Aug 24 Javascript
详解JavaScript的变量和数据类型
Nov 27 Javascript
基于JS实现textarea中获取动态剩余字数的方法
May 25 Javascript
谈谈jQuery之Deferred源码剖析
Dec 19 Javascript
js获取元素的偏移量offset简单方法(必看)
Jul 05 Javascript
Angular4学习笔记之准备和环境搭建项目
Aug 01 Javascript
Vue组件通信实践记录(推荐)
Aug 15 Javascript
axios 处理 302 状态码的解决方法
Apr 10 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
Dec 07 Javascript
微信小程序中weui用法解析
Oct 21 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 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
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
浅析php原型模式
2014/11/25 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
jQuery插件 tabBox实现代码
2010/02/09 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
python面向对象 反射原理解析
2019/08/12 Python
Python进程池Pool应用实例分析
2019/11/27 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
python 追踪except信息方式
2020/04/25 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
医德考评自我评价
2014/09/14 职场文书
离职报告范文
2014/11/04 职场文书
死亡赔偿协议书
2015/01/28 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs