完美解决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 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
Javascript函数的参数
Jul 16 Javascript
JavaScript:Date类型全面解析
May 19 Javascript
js给table赋值的实例代码
Oct 13 Javascript
JavaScript简单拖拽效果(1)
May 17 Javascript
Vue如何实现组件的源码解析
Jun 08 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
Dec 09 Javascript
vue封装一个简单的div框选时间的组件的方法
Jan 06 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
Jul 25 Javascript
浅谈TypeScript的类型保护机制
Feb 23 Javascript
浅谈vue权限管理实现及流程
Apr 23 Javascript
Vue CLI中模式与环境变量的深入详解
May 30 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 setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
php实现中文转数字
2016/02/18 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
jquery控制页面部分刷新的方法
2015/06/24 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
[58:23]LGD vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[50:50]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.20
2020/12/23 DOTA
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
Django静态文件加载失败解决方案
2020/08/26 Python
python跨文件使用全局变量的实现
2020/11/17 Python
python openssl模块安装及用法
2020/12/06 Python
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
岗位聘任书范文
2014/03/29 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby