完美解决IE低版本不支持call与apply的问题


Posted in Javascript onDecember 05, 2013

Function.prototype的apply和call是在1999年发布的ECMA262 Edition3中才加入的(1998年发布ECMA262 Edition2)。在此前的的浏览器如IE5.01(JScript 5.0)中是没有apply和call的。因此会带来一些兼容性问题,以下是修复方式:

if(!Function.prototype.apply){ 
    Function.prototype.apply = function(obj, args){ 
        obj = obj == undefined ? window : Object(obj);//obj可以是js基本类型 
        var i = 0, ary = [], str; 
        if(args){ 
            for( len=args.length; i<len; i++ ){ 
                ary[i] = "args[" + i + "]"; 
            } 
        } 
        obj._apply = this; 
        str = 'obj._apply(' + ary.join(',') + ')'; 
        try{ 
            return eval(str); 
        }catch(e){ 
        }finally{ 
            delete obj._apply; 
        }    
    }; 
} 
if(!Function.prototype.call){ 
    Function.prototype.call = function(obj){ 
        var i = 1, args = []; 
        for( len=arguments.length; i<len; i++ ){ 
            args[i-1] = arguments[i]; 
        } 
        return this.apply(obj, args); 
    }; 
}
Javascript 相关文章推荐
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
Dec 16 Javascript
javascript中sort()的用法实例分析
Jan 30 Javascript
AngularJS进行性能调优的7个建议
Dec 28 Javascript
谈一谈javascript中继承的多种方式
Feb 19 Javascript
EasyUI Combobox设置默认值 获取text的方法
Nov 28 Javascript
JavaScript实现多栏目切换效果
Dec 12 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
Dec 16 Javascript
基于jQuery的表单填充实例
Aug 22 jQuery
在Web关闭页面时发送Ajax请求的实现方法
Mar 07 Javascript
如何基于jQuery实现五角星评分
Sep 02 jQuery
javascript局部自定义鼠标右键菜单
Dec 08 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
Feb 10 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
Dec 05 #Javascript
jQuery表格插件ParamQuery简单使用方法示例
Dec 05 #Javascript
各浏览器对document.getElementById等方法的实现差异解析
Dec 05 #Javascript
给事件响应函数传参数的四种方式小结
Dec 05 #Javascript
弹出最简单的模式化遮罩层的js代码
Dec 04 #Javascript
js如何设置在iframe框架中指定div不显示
Dec 04 #Javascript
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 #Javascript
You might like
php随机输出名人名言的代码
2012/10/07 PHP
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
激活 ActiveX 控件
2006/10/09 Javascript
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
小程序实现列表点赞功能
2018/11/02 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
HTML5 weui使用笔记
2019/11/21 HTML / CSS
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
爱我中华演讲稿
2014/05/20 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
工作证明英文模板
2014/10/21 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS