1.作用
函数的bind方法用于将函数体内的this绑定到某个对象,然后返回一个新函数。
Fn.bind(obj, arg1, arg2,...);
Fn.bind(obj) //新的函数 function () { [native code] } 看不到
Fn.bind(obj) (); //执行函数 类似:a=function(){}; 执行 a(); 一个道理
2.实例
var Fn = function(){ console.log(this); } var obj = {a:1}; Fn(); -> window //在浏览器环境 Fn.bind(obj) -> function () { [native code] } //得到新的函数 Fn.bind(obj)(); -> Object {a: 1} //执行结果 console.log(this); this = obj
3.绑定参数
function add(x,y) { return x+y; } var plus5 = add.bind(null, 5); //把第一个参数给绑进去 plus5(10) // 15 5+10 = 15
3.注意
bind每次运行都会产生新的函数,所以在用的时候要小心
element.addEventListener(‘click‘, Fn.bind(obj)); //在点击的时候,每次都会产生一个新的函数 element.removeEventListener(‘click‘, Fn.bind(obj)); //移除事件的时候就会无法取消绑定 //正确的方法 var listener = Fn.bind(obj); element.addEventListener(‘click‘,listener ); element.removeEventListener(‘click‘, listener );
4.兼容
bind方法在ie8以下都不支持, 自定义bind如下
if(!(‘bind‘ in Function.prototype)){ //Function如果没有bind方法的话 Function.prototype.bind = function(){ //Function原型添加bind var fn = this; // var context = arguments[0]; //obj 第一个 var args = Array.prototype.slice.call(arguments, 1); //arg 去掉第一个的 return function(){ //返回一个新的fun return fn.apply(context, args); // fn 上层的this 指的是引用bind的函数 } } }
时间: 2024-11-04 12:17:27