Function.prototype.apple.callのまとめ

2046 ワード


ネットでコードを見ましたが、いいと思います.分析してみます.
まず、applyとcallの基本的な使い方を知る必要があります.その目的は呼び出し方法のthisの方向を変えて、それを着信の対象に向けることです.
 
コード:consone.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
 
分析:
 
      Funtion.prototype.apple.callをどう理解すればいいですか?はい
      まずFuntions.prototype.applyを全体として見られます.
       FunctionApple.call;
       この文を訳してください.
       log.FuntionApple;
       それからまた訳してください.分かりますよね.普通の方法で呼びます.
       consolone.log(argments);
 
発散思考:
Function.prototype.call.apply(logs);
 
FunctionCall.apply(log,[console,arguments]);
log.FunctionCall(console,arguments);
console.log(arguments);
 
 
小tips:
 
    Function.prototype.apple.call Function.prototype.cal.callに等しいです.
    Function.prototype.call.appy Function.prototype.apple.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.XX.cal(child,parent,argments|array);
    Function.prototype.xp.apply(child,parent,argments|array);