完美解决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 06 Javascript
jQuery Validation实例代码 让验证变得如此容易
Oct 18 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
Dec 17 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
Apr 25 Javascript
JQuery动画animate的stop方法使用详解
May 09 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
Dec 04 Javascript
js弹性势能动画之抛物线运动实例详解
Jul 27 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
Jan 21 Javascript
基于Node.js搭建hexo博客过程详解
Jun 25 Javascript
ionic+html5+API实现双击返回键退出应用
Sep 17 Javascript
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
详解TS数字分隔符和更严格的类属性检查
May 06 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中对数据库操作的封装
2006/10/09 PHP
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
python实现多线程端口扫描
2019/08/31 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
python 数据类型强制转换的总结
2021/01/25 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
信息管理专业自荐书
2014/06/05 职场文书
英文导游词
2015/02/13 职场文书
小学少先队活动总结
2015/05/08 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python