首页 > 代码库 > bind()
bind()
首先是改变this指向问题
1 var altwrite = document.write;
2 altwrite("hello");
上面的程序运行,会报错:Uncaught TypeError: Illegal invocation 非法调用
报错的原因就是this指向问题,因为altwrite指向的是windowd对象,而write指向的是document对象
我们可以通过bind()修改altwrite的上下文,把它指向document,就可以了,修改如下:
1 var altwrite = document.write;
2 altwrite.bind(document)("hello");
当然也可以使用call()
方法:
1 altwrite.call(document, "hello")
绑定函数
bind()
最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的this值。
将方法从对象中拿出来,然后调用,并且希望this指向原来的对象。如果不做特殊处理,一般会丢失原来的对象。使用bind()
方法能够很漂亮的解决这个问题:
1 this.num = 9; 2 var mymodule = { 3 num: 81, 4 getNum: function() { 5 return alert(this.num); 6 } 7 }; 8 9 mymodule.getNum();//81 10 11 var getNumb = mymodule.getNum; 12 getNumb();// 9 这个函数里面的this指向的是全局对象 13 14 //创建一个this绑定到mydule的函数 15 var boundGetNum = getNumb.bind(mymodule); 16 boundGetNum(); // 81
bind()
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。