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 相关文章推荐
jQuery使用手册之二 DOM操作
Mar 24 Javascript
优化 JavaScript 代码的方法小结
Jul 16 Javascript
javascript学习笔记(三) String 字符串类型介绍
Jun 19 Javascript
不使用浏览器运行javascript代码的方法
Jul 24 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
Sep 25 Javascript
基于javascript实现全屏漂浮广告
Mar 31 Javascript
浅谈js中调用函数时加不加括号的问题
Jul 28 Javascript
javascript将url解析为json格式的两种方法
Aug 18 Javascript
JS实现点击循环切换显示内容的方法
Oct 19 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
Sep 07 Javascript
Angular实现svg和png图片下载实现
May 05 Javascript
koa2 从入门到精通(小结)
Jul 23 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
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
html下载本地
2006/06/19 Javascript
Javascript 构造函数 实例分析
2008/11/26 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
解析js如何获取css样式
2016/12/11 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
生产现场工艺工程师岗位职责
2013/11/28 职场文书
两年的个人工作自我评价
2014/01/10 职场文书
党员实事承诺书
2014/03/26 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
合作协议书范本
2014/10/25 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书
关于环保的广播稿
2015/12/17 职场文书