ホームページ  >  記事  >  ウェブフロントエンド  >  呼び出しのアプリケーション シナリオは javascript_javascript スキルに適用されます

呼び出しのアプリケーション シナリオは javascript_javascript スキルに適用されます

WBOY
WBOYオリジナル
2016-05-16 16:03:431061ブラウズ

一部の jQuery プラグインでは callback.call(xxx,xxx) のようなものをよく見かけますが、call 関数と apply 関数でスコープを変更できると本で読んだのですが、主な目的がまだ完全には理解できません。このようなコードを読むたびに、どのような問題が解決されるのか、代替手段はあるのか、またはこれら 2 つの機能が主に解決することを目的としているのか、それらをいつ使用するのが最適なのかを考えます。めまいがして直線的な読書から飛び出すのは少し複雑な感じです

call と apply の機能は非常にシンプルで、コンテキストを変更するだけです。適用できるシナリオはたくさんありますが、私がよく使用するシナリオは次のとおりです。

1.

コードをコピーします コードは次のとおりです。
Object.prototype.toString.call(Obj)

Obj のタイプを決定するために使用されます

引数は配列に似ていますが、配列のプッシュメソッドがありません。
Array.prototype.push.call(引数)

3.JavaScriptにはプライベートメソッドの概念がないので、クロージャを使って実装したい

(function () {
  var Person = function () {
    this.doSomeThing = function () {
      _privateFunction.call(this);
    }
  }

  var _privateFunction = function () {

  }

  window.Person = Person;

}).call(window);

これはほぼ同じことを意味します。コールバックするときに、コールバック内のコンテキストを現在のコンテキストにしたい場合、call または apply を使用することもできます。どのような利点がありますか?

現時点では、コールバック内の this は現在のコンテキストを参照します。たとえば、クラス person とそのメソッドにはコールバック パラメータがあるとします。このコールバックが通常の括弧を通じて実行される場合、このコールバックで実行される person の他のメソッドは person.other を使用して実装する必要がありますが、その後コンテキストが切り替わります。これですべて完了です。other~ コードの比較は次のとおりです:

var Person = function(){

};

Person.prototype.say = function(callback){
  callback();
};

Person.prototype.other = function(){

};

var vincent = new Person();

vincent.say(function(){
  vincent.other();
});

使用された通話:

var Person = function(){

};

Person.prototype.say = function(callback){
  callback.call(this);
};

Person.prototype.other = function(){

};

var vincent = new Person();

vincent.say(function(){
  this.other();
});

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

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