[ 问 ]: bind()方法在使用时受到浏览器兼容性的限制,那这该如何解决兼容性问题呢?
答 : 在主流浏览器下原型对象是具有bind属性的,我们可以通过这个特性来区分浏览器,使用apply()方法来帮助bind()改变this指向从而解决兼容性问题。
//在Function的原型上自定义myBind()方法
Function.prototype.myBind=function myBind(context){
//获取要操作的函数
var _this=this;
//获取实参(context除外)
var args=Array.prototype.slice.call(arguments,1);
//判断当前浏览器是否兼容bind()方法
if('bind' in Function.prototype){
//如果浏览器兼容bind()方法,则使用bind()方法,并返回bind()方法执行后的结果
return _this.bind(context,args);
}
//如果不兼容bind()方法,则返回一个匿名函数
return function(){
_this.apply(context,args);
}
}