首页 > 移动平台 > 详细

Function.prototype.apply.call的总结

时间:2015-09-30 02:13:49      阅读:174      评论:0      收藏:0      [点我收藏+]

?

网上看到一段代码,哎,觉得挺不错,然后来分析一下,

首先需要了解apply,call的基本用法,其目的是改变调用方法中的this指向,将其指向为传入的对象

?

代码:console.log

?

var console = window.console || {log: function () {}}; 
var log = console.log;
console.log = function(tips,message){ 
   Function.prototype.apply.call(log, console, arguments); 
   //Function.prototype.call.call(log, console, arguments);
   //Function.prototype.call.apply(log, [console, arguments]); 
  
 //传统方式
 //var args=[].slice.call(arguments);
 //log.apply(console,args);
}

?

?

执行结果:

?

console.log("测试","This is test");

?

测试 This is test

?

分析:

?

? ? ? 该怎么理解Function.prototype.apply.call(log,console,arguments);呢

? ? ? 首先可以将Function.prototype.apply看成一个整体-->FunctionApply

? ? ? ?FunctionApply.call(log,console,arguments);

? ? ? ?那么将此句翻译一下

? ? ? ?log.FunctionApply(console,arguments);

? ? ? ?然后再翻译一下,你就懂了吧,就是一个普通方法调用了

? ? ? ?console.log(arguments);

?

发散思维:

Function.prototype.call.apply(log,[console.arguments]);

?

FunctionCall.apply(log,[console,arguments]);
log.FunctionCall(console,arguments);
console.log(arguments);

?

?

小tips:

?

? ? Function.prototype.apply.call ?等同于Function.prototype.call.call

? ? Function.prototype.call.apply ?等同于 Function.prototype.apply.apply

?

?

免费外送个栗子:

?

function testA(a){
    console.log(‘aaaa‘,a);
}
Function.prototype.apply.call(testA,window,[‘Mike‘]);
//Function.prototype.call.call(testA,window,[‘Mike‘]);
//testA.apply(window,[‘Mike‘]);
//window.testA(‘Mike‘);
//Function.prototype.apply.apply(testA,[window,[‘Mike‘]]);
//Function.prototype.call.apply(testA,[window,[‘Mike‘]]);

?

以上执行结果都一样

? ? 为:aaaa Mike

?

总结使用用法:

? ? XXX可以是call或者是apply,child一定是parent可指向的对象

? ? Function.prototype.XXX.call(child,parent,arguments||array);

? ? Function.prototype.XXX.apply(child,[parent,arguments||array]);

?

Function.prototype.apply.call的总结

原文:http://zhangzhaoaaa.iteye.com/blog/2246733

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!