完美解决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 相关文章推荐
jquery 弹出登录窗口实现代码
Dec 24 Javascript
jQuery 动态云标签插件
Nov 11 Javascript
js实现jquery的offset()方法实例
Jan 10 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
Aug 04 Javascript
js实现基于正则表达式的轻量提示插件
Aug 29 Javascript
js实现的Easy Tabs选项卡用法实例
Sep 06 Javascript
JQuery学习总结【一】
Dec 01 Javascript
JS实现颜色动态淡化效果
Mar 06 Javascript
收集前端面试题之url、href、src
Mar 22 Javascript
JavaScript遍历数组和对象的元素简单操作示例
Jul 09 Javascript
vue3.0 项目搭建和使用流程
Mar 04 Vue.js
Javascript中async与await的捕捉错误详解
Mar 03 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
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
HttpServlet类中的主要方法都有哪些?各自的作用是什么?
2014/03/16 面试题
夜班门卫岗位职责
2013/12/09 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
教师专业自荐信
2014/05/31 职场文书
买卖合同协议书范本
2014/10/18 职场文书
合理化建议书范文
2015/09/14 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
为什么RedisCluster设计成16384个槽
2021/09/25 Redis