js高级技巧---函数绑定
2017-03-29 21:42
351 查看
使用场景:把一个含有this的函数作为值传入另一个函数中运行,此时造成this指向错误的对象。主要出现在事件处理程序以及setTimeout(),setInterval() 使用中。
如何绑定?
ECMAScript5 定义 了bind()原生方法,解决此问题。
bind() 函数 意在将函数的执行环境原封不动的同被传函数传入到另一个函数中。
EventUtil.js
bind()方法不支持IE6-8 ,解决方法如下:
此外,apply() call() 是每个函数都包含的非继承而来的函数。
参数:[this作用域,params] 参数2可选
作用:
1. 在特定的作用域中调用函数;
2. 扩充函数赖以运行的作用域。(可以理解为this可指向到其他对象上)
如:
apply 第二参数 可以是 arguments 或者 参数数组;
call 第二参数 罗列参数
$(".MathJax").remove();
如何绑定?
ECMAScript5 定义 了bind()原生方法,解决此问题。
bind() 函数 意在将函数的执行环境原封不动的同被传函数传入到另一个函数中。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="../EventHander.js"></script> </head> <body> <button id="btn">点击</button> <script> var handler = { message:'hello', handleClick:function (ev) { alert(this.message); } } var btn = document.getElementById('btn'); EventUtil.addHandler(btn,'click',handler.handleClick.bind(handler)); </script> </body> </html>
EventUtil.js
var EventUtil = { getEle:function (id) { return document.getElementById(id); }, addHandler:function (ele,type,handler) { if(ele.addEventListener) { ele.addEventListener(type,handler,false); }else if(ele.attachEvent) { ele.attachEvent(type,handler); }else { ele["on"+type] = handler; } }, removeHandler:function (ele,type,handler) { if(ele.removeHandler) { ele.removeHandler(type,handler,false); }else if(ele.detachEvent) { ele.detachEvent(type,handler); }else { ele["on"+type] = null; } }, getEvent:function (ev) { return ev?event:window.event; }, getTarget:function (ev) { return ev.target || ev.srcElement; }, preventDefault:function (ev) { if(ev.preventDefault) { ev.preventDefault(); }else { ev.returnValue = false; } }, stopPropagation:function (ev) { if(ev.stopPropagation) { ev.stopPropagation(); }else { ev.cancelBubble = true; } }, // 获取按键字符编码 键盘事件可用 getCharCode:function (ev) { if(typeof ev.charCode == "number") { return ev.charCode; }else { return ev.keyCode; } } }
bind()方法不支持IE6-8 ,解决方法如下:
function newBind(fn,context) { return function() { return fn.apply(context,fn); } }
此外,apply() call() 是每个函数都包含的非继承而来的函数。
参数:[this作用域,params] 参数2可选
作用:
1. 在特定的作用域中调用函数;
2. 扩充函数赖以运行的作用域。(可以理解为this可指向到其他对象上)
如:
window.color='red'; var o = {color:'blue'}; function sayColor() { alert(this.color); } sayColor.call(this); //red 全局作用域下this=>window sayColor.call(window);//red sayColor.call(o);//blue 此时this 指向o对象
apply 第二参数 可以是 arguments 或者 参数数组;
call 第二参数 罗列参数
$(".MathJax").remove();
相关文章推荐
- JS高级技巧之函数节流
- JS高级编程1-函数绑定
- ASP.NET 2.0 绑定高级技巧
- ASP.NET 2.0 绑定高级技巧
- ASP.NET 2.0 绑定高级技巧(zz)
- JS中的函数解释和小技巧
- ASP.NET 2.0 绑定高级技巧
- [导入]ASP.NET 2.0快速入门(9):ASP.NET 2.0 数据绑定高级技巧
- ASP.NET 2.0 绑定高级技巧
- ASP.NET 2.0 绑定高级技巧
- ASP.NET 2.0 绑定高级技巧(转载)
- ASP.NET 2.0 绑定高级技巧
- ASP.NET 2.0 绑定高级技巧
- ASP.NET 2.0 绑定高级技巧 (转)
- (转)ASP.NET 2.0 绑定高级技巧
- ASP.NET 2.0 绑定高级技巧
- ASP.NET 2.0 绑定高级技巧
- ASP.NET 2.0 绑定高级技巧
- ASP.NET 2.0 绑定高级技巧
- ASP.NET 2.0 绑定高级技巧