javascriptの中でcallとappyの模擬は実現します.
4043 ワード
call()
call()メソッドは、指定されたthis値と、それぞれ提供されるパラメータ(パラメータのリスト)を有する関数を呼び出します.文法:
fun.call(thisArg, arg1, arg2, ...)
例:var name="lee";
var obj={
name:"lwf"
};
function foo(){
console.log(this.name);
}
foo();//lee( )
foo.call();//lee, ,this window
foo.call(null);//,lee, window
foo.call(undefined);//lee, window
foo.call(obj);//lwf。 ,this obj
var obj={
name:"lwf"
};
function foo(age){
console.log(age);
}
foo.call(obj,21);//21
var obj={
name:"lwf"
};
function foo(age){
return age;
}
console.log(foo.call(obj,21));//21
これにより、コール方法の役割が見られます.Function.prototype.call2=function(context){
var context=context||window;// this
context.fn=this;// call
var args=[].slice.call(arguments,1);//
var result=eval('context.fn('+args+')');// return,
delete context.fn;//
return result;
};
同様に、appyのアナログ実装:Function.prototype.apply2=function(context){
var context=context||window;
context.fn=this;
var args=arguments[1];
var result;
if(args){
result=eval('context.fn('+args+')');
}else{
result=context.fn();
}
delete context.fn;
return result;
};
参考:JavaScript深入なcallとappyのシミュレーションが実現しました.