javascriptの中のcallを詳しく説明します.

6516 ワード

jsを勉強している学生はcallを見たら、applyを隠しました.気持ちがよく分かりません.見た頭が大きいです.今日はこの二つの東を研究してみます.徹底的にそれらの使い方を調べます.
 
定義:
call、appyは関数の方法で、関数だけがこの2つの方法があります.
call、applyの主な役割は関数を変えて実行する作用領域です.簡単に言えば関数のthisの方向を変えることです.使い方:
fn.call(obj,args 1,args 2,…);Objは関数を指定して実行するオブジェクトで、arg 1などは関数に伝えるパラメータです.(もしあれば)fn.appy(obj、[args 1、args 2、...])///Objは関数を指定して実行するオブジェクトで、[arg 1、...]などは関数に伝えるパラメータ配列です.
 
違い:
callとapplyの違いはパラメータの違いです.callのパラメータは一つ一つ列挙しなければなりません.appyのパラメータは配列またはargmentsオブジェクトでなければなりません.
 
 
  1:

   function fn(arg){

      alert(arg);

   }

    fn.call(this, 'hello world'); //hello world,   fn    this,      this  window  .

    fn.apply(this, ['hello world']); //hello world,   fn    this,      this  window  .

2: function fn(arg1, arg2, arg3){ alert(arg1 + arg2 + arg3); } fn.call(this, 'hello world', 'petty', 'jack'); //hello worldpettyjack fn.apply(this, ['hello world', 'petty', 'jack']); //hello worldpettyjack

3:
function myFn(arg1, arg2, arg3){ alert(arg1 + arg2 + arg3); } function fn(arg1, arg2, arg3){ myFn.apply(this, arguments); // arguments , fn [arg1, arg2, arg3] } fn('hello', 'world', '!'); //helloworld!
4:
var o = { name: 'tom' }; function fn(){ alert(this.name); } fn.call(this); // this window, window name fn.call(o); // this o, o name , 'tom' fn.apply(o); //

5:
function MyFn(name){ this.name = name; } // function Fn(age, name){ this.age = age; MyFn.call(this, name); // call , , MyFn name . //MyFn.apply(this, [name]); // } // var person = new Fn(20, 'tom'); alert(person.name); // Fn name , call apply , MyFn name , 'tom'

call apply , jquery each . function each(obj, fn){ var i; if(Object.prototype.toString.call(obj) === '[object Array]'){ for(i = 0, length = obj.length; i < length; i++){ fn.call(obj[i], i, obj[i]); } } else if(typeof obj === 'object'){ for(i in obj){ if(obj.hasOwnProperty(i)){ fn.call(obj[i], i, obj[i]); } } } else{ return false; } } var oDiv = document.getElementsByTagName('div'); each(oDiv, function(){ this.style.background = '#ff0000'; // div . });
 
簡単にしましょう.