完美解决IE低版本不支持call与apply的问题
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 call和apply区别及使用方法
一.方法的定义call方法: 语法:fun.call(thisArg[, arg1[, arg2[, ...]]])定义:调用一个对象的一个方法,以另一个对象替换当前对象.说明:call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisArg 指定的新对象.如果没有提供 thisArg参数,那么 Global 对象被用作 thisArg. apply方法:语法:fun.apply(thisArg[, argsArray])定义:应用某
-
Javascript 中的 call 和 apply使用介绍
简单的说就是改变函数执行的上下文,这是最基本的用法.两个方法基本区别在于传参不同. call(obj,arg1,arg2,arg3);call第一个参数传对象,可以是null.参数以逗号分开进行传值,参数可以是任何类型. apply(obj,[arg1,arg2,arg3]);apply第一个参数传对象,参数可以是数组或者arguments 对象. 这两个方法通常被用来类的继承和回调函数: 作用一.类的继承: 先来看这个例子: 复制代码 代码如下: function Person(name,ag
-
javascript call和apply方法
例子如下: 复制代码 代码如下: <script> /** *动物 */ function Animal(){ this.name='Amimal'; this.showName=function(){ alert(this.name); }; } /* *猫 */ function Cat(){ this.name='cat'; } var animal=new Animal;//创建动物对象 var cat=new Cat;//创建猫对象 animal.showName.call(cat,
-
javascript中call和apply方法浅谈
call和apply的第一个实参是要调用函数的母对象,它是调用上下文,在函数体内通过this来获得对它的引用.例如,如果要想以对象o的方法来调用函数f,可以按如下的方式使用call和apply方法: 复制代码 代码如下: f.call(o); f.apply(o); 可以按如下的代码来理解: 复制代码 代码如下: o.m = f; //将f存储为o的临时方法 o.m(); //调用这个临时方法 delete o.m; //将这个临时方法删除 来个示例吧. 复制代码 代码如下: function
-
完美解决IE低版本不支持call与apply的问题
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){
-
vue 解决IOS10低版本白屏的问题
新公司是做自己的独立产品,比之前呆过的外包公司要求严格的多,注重用户体验,以下是在新项目里进行前端优化的一些操作 一,低版本空白屏问题,以及ios8的样式问题 本项目是通过vue-cli搭建,上线以后运行在新版本的苹果手机和安卓手机上均无问题.但是在ios8 9上出现了空白屏的原理,经过测试以后发现是低版本不兼容es6的语法,经过几番尝试找到了最优解. 1 空白屏问题 首先安装babel-polyfill,安装命令:npm install --save-dev babel-polyfill 安装
-
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
页面中的输入框默认的提示文字一般使用placeholder属性就可以了,即: <input type="text" name="username" placeholder="请输入用户名" value="" id="username"/> 最多加点样式控制下默认文字的颜色 input::-webkit-input-placeholder{color:#AAAAAA;} 但是在低版本的浏览器却不支
-
解决IE7以下版本不支持无A状态伪类的几种方法
在IE7以下版本一直是不支持无A状态伪类的,通常都要靠Javascript来解决的,最近经常有人问起此类问题,故整理了几种方法,脚本来自国外网站,供大家参考. 方法一 javascript文件,来自Htmldog . 复制代码 代码如下: function suckerfish(type, tag, parentId) { if (window.attachEvent) { window.attachEvent("onload", function() {
-
让低版本浏览器支持input的placeholder属性(js方法)
复制代码 代码如下: var doc = window.document, input = doc.createElement('input'); if( typeof input['placeholder'] == 'undefined' ) // 如果不支持placeholder属性 { $('input').each(function( ele ) { var me = $(this); var ph = me.attr('placeholder'); if( ph && !me.v
-
MySQL版本低了不支持两个时间戳类型的值解决方法
MySQL报错:错误代码: 1293 Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP 原因是:两台服务器的mysql版本不一致. 低版本不支持在一个表里面 有2个TIMESTAMP 类型 的列. 项目中版本是: 配置环境(推荐jdk8,mysql5.7,maven3,想法) 我的是5.52 解决方法? 是采用把2台服务器都使用最新的版本这个办法 以上方法很简单,感谢
-
解决低版本的浏览器不支持es6的import问题
解决方法: 1. <script type="model" src="game.js"></script> 2. 下载最新版本的chrome浏览器 以上这篇解决低版本的浏览器不支持es6的import问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
-
解决Python3.7.0 SSL低版本导致Pip无法使用问题
终于下决心把python从2.7升到了3.7.懒人安装当然使用Anaconda. 安装成功,编译成功.但是用pip 安装包的时候提示: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 原因是python3.7为了安全性考虑,要求使用openssl 1.0.2之后的版本.但是自带的openssl,版本是1.0.1. 解决办法: 重装一下
-
完美解决Jpush[获取sdk版本失败!]的问题
错误日志如下: 5-31 12:47:40.088 23896-23896/? E/JIGUANG-JCore: [JCoreGlobal] Get sdk version fail![获取sdk版本失败!] 05-31 12:47:40.088 23896-23896/? W/System.err: java.lang.UnsatisfiedLinkError: Native method not found: cn.jiguang.service.Protocol.GetSdkVersion
-
Java程序实现导出Excel的方法(支持IE低版本)
今天想整理一下自己前段时间遇到的一个导出的问题. 因为项目的需求,要做一部分导出功能.开始的时候用的公司的导出,但是很奇怪有部分模块导出的时候就是会报500错误,发现在删减一些字段后就恢复了正常,当时因为项目紧张,也就临时删减了一些,但也不是长久之计,之后自己在原本的基础上重新修改整理了一下,目前运行还算稳定,就此和大家分享一下. 导出需要三个部分,js,公共方法,后台方法. js代码 function exportData() { //前台接收的参数 rwmc = $("#txt_rwmc&q
随机推荐
- 无需数据库在线投票调查php代码
- Flex DataGrid自动编号示例
- VBS伪造HTTP-REFERER的实现方法
- JavaScript中的Math 使用介绍
- JavaScript比较两个对象是否相等的方法
- Angularjs单选改为多选的开发过程及问题解析
- DOS命令 Interlnk、Intersvr命令使用说明
- MySQL主从同步、读写分离配置步骤
- JDBC基础教程
- ASP.NET 中的Application详解
- js中setTimeout()与clearTimeout()用法实例浅析
- python对字典进行排序实例
- web.py 十分钟创建简易博客实现代码
- C#中的DateTime是值类型还是引用类型
- 通过C#实现发送自定义的html格式邮件
- javascript 回调函数详解
- jQuery实现宽屏图片轮播实例教程
- 没有form表单情况下敲回车键提交表单的js代码
- Android 中cookie的处理详解
- java微信扫描公众号二维码实现登陆功能