码迷,mamicode.com
首页 > Web开发 > 详细

js bind

时间:2016-06-07 19:07:11      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

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的函数
     }
   }
}    

 

js bind

标签:

原文地址:http://www.cnblogs.com/zycbloger/p/5567873.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!