完美解决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 相关文章推荐
得到文本框选中的文字,动态插入文字的js代码
Mar 07 Javascript
jquery提升性能最佳实践小结
Dec 06 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
Dec 12 Javascript
你未必知道的JavaScript和CSS交互的5种方法
Apr 02 Javascript
基于jQuery滑动杆实现购买日期选择效果
Sep 15 Javascript
Bootstrap精简教程中秋大放送
Sep 15 Javascript
javascript实现文字无缝滚动效果
Aug 26 Javascript
浅谈Vue SPA 首屏加载优化实践
Dec 15 Javascript
vue.js $refs和$emit 父子组件交互的方法
Dec 20 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
Apr 11 Javascript
vue实现拖拽进度条
Mar 01 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
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中break及continue两个流程控制指令区别分析
2011/04/18 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
JS解密入门之凭直觉解
2008/06/25 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
用Python解决计数原理问题的方法
2016/08/04 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
python3访问字典里的值实例方法
2020/11/18 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
网络安全方面的面试题
2016/01/07 面试题
外贸主管求职简历的自我评价
2013/10/23 职场文书
青年文明号复核材料
2014/02/11 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
分公司经理任命书
2014/06/05 职场文书
篮球赛口号
2014/06/18 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
经典毕业生求职信
2014/07/12 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
导游词之徐州云龙湖
2019/11/19 职场文书
Python实现打乒乓小游戏
2021/09/25 Python
JavaScript实现简单的音乐播放器
2022/08/14 Javascript