完美解决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 相关文章推荐
解析JavaScript中点号“.”的多义性
Dec 02 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
Dec 14 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
Jan 15 Javascript
JS操作iframe里的dom(实例讲解)
Jan 29 Javascript
PHP 数组current和next用法分享
Mar 05 Javascript
Bootstrap布局组件应用实例讲解
Feb 17 Javascript
详解js界面跳转与值传递
Nov 22 Javascript
js实现九宫格的随机颜色跳转
Feb 19 Javascript
浅谈原生JS实现jQuery的animate()动画示例
Mar 08 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
Oct 25 Javascript
JS 使用 window对象的print方法实现分页打印功能
May 16 Javascript
vue动态设置页面title的方法实例
Aug 23 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
mysql5详细安装教程
2007/01/15 PHP
PHP实现MVC开发得最简单的方法――模型
2007/04/10 PHP
PHP5中虚函数的实现方法分享
2011/04/20 PHP
php 判断数组是几维数组
2013/03/20 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
php session_decode函数用法讲解
2019/05/26 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
Python实现的简单万年历例子分享
2014/04/25 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
Python3 中文文件读写方法
2018/01/23 Python
python实现图片识别汽车功能
2018/11/30 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
python上selenium的弹框操作实现
2020/07/13 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
人事专员的职责
2014/02/26 职场文书
献爱心倡议书
2014/04/14 职场文书
给校长的建议书500字
2014/05/15 职场文书
5s标语大全
2014/06/23 职场文书
公证处委托书
2015/01/28 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android