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 学习笔记 选择器之三
Jul 23 Javascript
jquery 防止表单重复提交代码
Jan 21 Javascript
浅析AngularJS Filter用法
Dec 28 Javascript
实例讲解javascript注册事件处理函数
Jan 09 Javascript
原生js实现下拉框功能(支持键盘事件)
Jan 13 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
详解node.js的http模块实例演示
Jul 12 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
Jan 30 Javascript
详解原生JS回到顶部
Mar 25 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
Apr 09 Javascript
Angular8 实现table表格表头固定效果
Jan 03 Javascript
vue 遮罩层阻止默认滚动事件操作
Jul 28 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
一个捕获函数输出的函数
2007/02/14 PHP
php flush类输出缓冲剖析
2008/10/19 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
Python实现类继承实例
2014/07/04 Python
Python函数的周期性执行实现方法
2016/08/13 Python
python使用PyCharm进行远程开发和调试
2017/11/02 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
Python sys模块常用方法解析
2020/02/20 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
英国灯具和灯泡网上商店:Lights.co.uk
2018/02/02 全球购物
小学生元旦广播稿
2014/02/21 职场文书
建筑安全责任书范本
2014/07/24 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
农业项目合作意向书
2015/05/08 职场文书
导游词之扬州大明寺
2019/10/09 职场文书
使用pytorch实现线性回归
2021/04/11 Python
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript