首页 > 代码库 > 《javascript设计模式与开放实践》学习(一)Function.prototype.bind
《javascript设计模式与开放实践》学习(一)Function.prototype.bind
使用Function.prototype.bind来包装func函数
1、简化版的bind
Function.prototype.bind=function (context) { var self=this; //保存原函数 return function () { return self.apply(context,arguments); } }; var obj={name:‘seven‘}; var func=function(){ alert(this.name); }.bind(obj); func();
2、含参数的bind
Function.prototype.bind=function() { var self=this; context=[].shift.call(arguments);//需要绑定的this上下文 args=[].slice.call(arguments);//剩余的参数 return function () { return self.apply(context,[].concat.call(args,[].slice.call(arguments)));
//等同于return self.apply(context,args.concat(arguments));此arguments后传入的参数
}; } var obj={name:‘seven‘}; var func=function(a,b,c,d){ alert(this.name);//输出seven alert([a,b,c,d]);//输出[1,2,3,4] }.bind(obj,1,2) func(3,4);
注:
1)arguments对象: arguments 对象并不是一个数组,访问单个参数的方式与访问数组元素的方式相同。
2)shift用法:用于把数组的第一个元素从其中删除,并返回第一个元素的值。
2)slice用法:slice() 方法可从已有的数组中返回选定的元素。
3)concat用法:concat() 方法用于连接两个或多个数组。
《javascript设计模式与开放实践》学习(一)Function.prototype.bind
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。