ie支持function.bind()方法实现代码
2023-06-13 09:14:43 时间
前端开发者应该很清楚Javscript脚本的function函数对象可以通过call或apply方法,使其改变内部作用域(this)所指向的对象,实现更多可扩展的功能开发。ie原生支持function对象的call和apply方法,在firefox或其它浏览器下也得到支持,但是call和apply方法是立即作用并执行,例如:
复制代码代码如下:
varfunc=function(){
alert(this);
}.apply(window);
当脚本解析引擎执行到这段代码时,会立即弹出对话框并显示object字符串。我们的初衷是想定义func方法作用在window对象域上,并在后期调用时再执行,但是call和apply方法并不能满足我们的初衷,它们会立即得到执行。
在google一番技术资料后,发现firefox原生支持一个bind方法,该方法很好的满足了我们的初衷,调用方法与call和apply一样,只是定义完成后,在后期调用时该方法才会执行。但是这个bind方法只有在ie10版本的浏览器才得到原生支持,低于该版本的浏览器下执行时会得到一个undefined的错误提示。于是只好再次上网google解决方案,功夫不负有心人,我们在firefox的开发站找到了解决方案,那就是增加property原型使得所有浏览器都能支持bind方法,代码如下:
if(!Function.prototype.bind){
Function.prototype.bind=function(oThis){
if(typeofthis!=="function"){
//closestthingpossibletotheECMAScript5internalIsCallablefunction
thrownewTypeError("Function.prototype.bind-whatistryingtobeboundisnotcallable");
}
varaArgs=Array.prototype.slice.call(arguments,1),
fToBind=this,
fNOP=function(){},
fBound=function(){
returnfToBind.apply(thisinstanceoffNOP&&oThis
?this
:oThis,
aArgs.concat(Array.prototype.slice.call(arguments)));
};
fNOP.prototype=this.prototype;
fBound.prototype=newfNOP();
returnfBound;
};
}
看懂这段代码需要点功底,我只是知道如何拿来用,如果哪位大牛有兴趣能够介绍一下这段源码的原理,不胜感激,谢谢!
单纯不是什么态度,而是一种满足。
相关文章
- Java代码中BeanUtils工具类的populate方法使用
- 网站禁用f12 禁止调试代码方法
- 【Groovy】集合遍历 ( 使用集合的 eachWithIndex 方法进行遍历 | 代码示例 )
- 5 种使用 Python 代码轻松实现数据可视化的方法详解编程语言
- MySQL删除代码简介及实现方法(mysql中删除代码)
- 统一接口:为FireFox添加IE的方法和属性的js代码
- C#版ftp方法实现类的代码
- asp.net下利用JS实现对后台CS代码的调用方法
- 在IIS中改变ASP.NET程序版本的实现方法附批处理代码
- js实现运行代码需要刷新的解决方法
- ASP实现网页打开任何类型文件都提示保存的方法附代码
- asp实现的可以提醒生日的几种方法附代码
- SyntaxHighlighter代码加色使用方法
- JavaScript函数、方法、对象代码
- js方法实现返回多个数据的代码
- php做下载文件的实现代码及文件名中乱码解决方法
- android左右滑动+索引图标实现方法与代码
- 实现web打印的各种方法介绍及实现代码
- 存储过程配合UpdateDaset方法批量插入Dataset数据实现代码
- 基于SilverlightDataGrid中无代码设置开始与结束日期DatePicker的实现方法
- 分享C#操作内存读写方法的主要实现代码
- C#调用Java代码的方法介绍
- Js+Jq获取URL参数的集中方法示例代码
- C#实现压缩HTML代码的方法