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下function声明一些小结
Dec 28 Javascript
Mootools 1.2教程 正则表达式
Sep 15 Javascript
Array.prototype 的泛型应用分析
Apr 30 Javascript
jquery自定义属性(类型/属性值)
May 21 Javascript
使用node.js 制作网站前台后台
Nov 13 Javascript
5种处理js跨域问题方法汇总
Dec 04 Javascript
JavaScript中的Repaint和Reflow用法详解
Jul 27 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
Oct 29 Javascript
移动端效果之Swiper详解
Oct 09 Javascript
用vue写一个仿简书的轮播图的示例代码
Mar 13 Javascript
微信小程序文章详情页跳转案例详解
Jul 09 Javascript
解决vue项目,npm run build后,报路径错的问题
Aug 13 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
Zerg基本策略
2020/03/14 星际争霸
PHP 图像尺寸调整代码
2010/05/26 PHP
php从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
js实现选项卡效果
2020/03/07 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
python实现交并比IOU教程
2020/04/16 Python
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
秋季红领巾广播稿
2014/01/27 职场文书
远程研修随笔感言
2014/02/10 职场文书
上党课的心得体会
2014/09/02 职场文书
公司合并协议书范本
2014/09/30 职场文书
银行授权委托书范本
2014/10/04 职场文书
教师业务学习材料
2014/12/16 职场文书
六一活动主持词
2015/06/30 职场文书
实习感想范文
2015/08/10 职场文书