コールについて

1099 ワード

JavaScriptのcallメソッドcall(object,a 1,a 2,,,,)は、2つの役割があります.
一、継承
function a(){
  this.x=1;
console.log(this)
}
function b(){
  console.log(this);
  a.call(this);
  console.log(this);
}
var bb=new b()
上記コード出力
b {}
 b {}
 b {x: 1}
a.callを説明しますの中のthisはbを指して、bはaの中で定義する属性をまた一回歩いて、aを継承したことに相当します.アプリは継承も可能です.
二、関数の実行時のポインタを変更します.
var each=function(arr,fn){
  let i=0,len=arr.length;
  for(;i
3回出力します.Functionには関数の作用領域が定義されていないので、出力のthisはwindowオブジェクトを表しています.
var each=function(arr,fn){
  let i=0,len=arr.length;
  for(;i
出力1 2 3.fn.call(arr[i],i,arr[i])を説明する.fn方法をarr[i]作用領域に置いて実行し、出力のthisはarr[i]を表します.
まとめ:a.cal(this)とは、thisが指す作用域継承a,a.cal(b)aの作用域をbの作用域に置いて実行する、つまりa.this=b
apply(object,配列)applyとcallの違いは、2番目のパラメータが配列であることです.applyの優れた使い方は、配列をパラメータリストに変換することです.例えば、Math.max(num 1,num 2,...)はパラメータリストを使わなければならないので、面倒です.
console.log(Math.max.apply(null,[2,4,5]))//  5,apply      null      window