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);
};
}
分享到:
相关推荐
function.prototype.name 符合ES2015规范的Function.prototype.name垫片。 如果不可用,则调用其“ shim”方法来对Function.prototype.name进行填充。 注意: Function#name需要一个真正的ES5环境-特别是一个带有ES5...
对于函数绑定(Function binding)很有可能是大家在使用JavaScript时最少关注的一点,但是当你意识到你需要一个解决方案来解决如何在另一个函数中保持this上下文的时候,你真正需要的其实就是 Function.prototype.bind...
主要介绍了理解javascript中的Function.prototype.bind的方法,具有一定参考价值,有兴趣的可以了解一下。
分析步骤如下: 1、将Function.prototype.call当成整体,call方法是由浏览器实现的本地方法,是函数类型的内部方法 var a = (Function.prototype.call).apply(function(a){return a;}, [0,4,3]); 2、fun
JavaScript 中,某个函数的参数数量是不固定的,因此要说适用条件的话,当你的参数是明确知道数量时,用 call,而不确定的时候,用 apply,然后把参数 push 进数组传递进去。当参数数量不确定时,函数内部也可以通过...
array.prototype.at 符合ESnext规范的Array.prototype.at / polyfill / replacement可以使用到ES3。 该软件包实现了接口。 它在ES3支持的环境中工作,并符合建议的。 因为Array.prototype.at依赖于接收方( this...
想必大家对Function.prototype.bind并不陌生吧,下面为大家介绍下它的简单调用及DOM调用,感兴趣的朋友可以参考下
Function.prototype.bind) { Function.prototype.bind = function (oThis) { if (typeof this !== "function") { throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); }...
主要介绍了Javascript Function.prototype.bind详细分析的相关资料,需要的朋友可以参考下
Function.prototype.bind polyfill 这是Function.prototype.bind的polyfill。 如果您正在使用不具有bind方法的浏览器,则很有用。 安装和使用 安装: npm install --save polyfill-function-prototype-bind 使用...
为什么要用Object.prototype.toString而不是Function.prototype.toString或者其它?这是和他们的toString解释方式有关系的。下面是ECMA中对Object.prototype.toString的解释: 代码如下: Object.prototype.toString...
} Person.prototype.SayHello = function() { alert(‘Hello, ‘ + this.Name); } Person.prototype.SayBye = function() { alert(‘Goodbye, ‘ + this.Name); } 不过,有的时候,为了书写以及...
发现大多人都用了Array.prototype.slice.call(argments,0),一直不明白这句是干什么的。而昨天温习了slice()方法,再参考Function.call(thisArg[, arg1[, arg2[, ...]]]),还是不得而知(我脑筋转得慢:|)。
代码如下: function test(){ //将参数转为一个数组 var args = Array.prototype.slice.apply(arguments); alert(args); } arguments在JavaScript语法中是函数特有的一个对象属性(Arguments对象),用来...
1、题外话,有关概念理解:String.prototype 属性表示 String原型对象。...String.prototype.format = function(){ if(arguments.length==0){ return this; } for(var s=this, i=0; i<arguments.
foo.prototype === Function.prototype ); //false。 当时一直没想明白为啥foo的原型不是Function.prototype。 下面例子让我想当然的认为o.prototype === Function.prototype 应该为true的: 代码如下: function...