ホームページ  >  記事  >  ウェブフロントエンド  >  関数本体の内部ポイントを変更するJavaScriptのアプリケーションと呼び出し使用例を詳しく解説

関数本体の内部ポイントを変更するJavaScriptのアプリケーションと呼び出し使用例を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-20 14:20:541430ブラウズ

call と apply はどちらも コンテキスト 、つまり関数の実行時のコンテキストを変更するために存在します。つまり、関数本体内の this のポインタを 変更するためのものです。

callとapply

は全く同じ機能を持っていますが、パラメータの受け取り方が異なります。

メソッド定義

apply
Function.apply(obj,args)メソッドは2つのパラメータを受け取ることができます:

obj:

このオブジェクトはFunctionクラスのこのオブジェクトを置き換えます

args:

This配列または配列に似たもので、apply メソッドはこのコレクション内の要素をパラメーターとして呼び出し先の関数に渡します。

call


callメソッド

の最初のパラメータは、2番目のパラメータがパラメータリストであることを除いてapplyメソッドと同じです
非厳密モードでは、最初のパラメータがnull または未定義として渡されると、関数本体のこれはデフォルトのホスト オブジェクトを指します。これは、ブラウザーでは window

var test = function(){
  console.log(this===window);
}
test.apply(null);//true
test.call(undefined);//true

Usage


他の人のメソッドを「ハイジャック」します


time

foo

logNameメソッドはbarによって参照され、thisは継承を実装するためにbar

var foo = {
  name:"mingming",
  logName:function(){
    console.log(this.name);
  }
}
var bar={
  name:"xiaowang"
};
foo.logName.call(bar);//xiaowang

を指します


function Animal(name){   
  this.name = name;   
  this.showName = function(){   
    console.log(this.name);   
  }   
}   

function Cat(name){  
  Animal.call(this, name);  
}   

var cat = new Cat("Black Cat");   
cat.showName(); //Black Cat

実際の開発では、この点は頻繁に遭遇 うっかり変更されたシーン。

ローカルの

fun
メソッドがあります。 fun が通常の関数として呼び出されるとき、 fun 内の thiswindow を指しますが、多くの場合、#test ノードを指す必要があります。次のコード:

window.id="window";
document.querySelector('#test').onclick = function(){
  console.log(this.id);//test
  var fun = function(){
    console.log(this.id);
  }
  fun();//window
}

call,apply

を使用すると、この問題を簡単に解決できます

window.id="window";
document.querySelector('#test').onclick = function(){
  console.log(this.id);//test
  var fun = function(){
    console.log(this.id);
  }
  fun.call(this);//test
}

もちろん、これを行うこともできますが、

ECMAScript 5

strictモードで、この場合、これはグローバル オブジェクトをポイントしないように規定されていますが、未定義:

window.id="window";
document.querySelector('#test').onclick = function(){
  var that = this;
  console.log(this.id);//test
  var fun = function(){
    console.log(that.id);
  }
  fun();//test
}

function func(){
  "use strict"
  alert ( this );  // 输出:undefined
}
func();

以上が関数本体の内部ポイントを変更するJavaScriptのアプリケーションと呼び出し使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。