ホームページ ウェブフロントエンド jsチュートリアル JSのthisのポインタとcallとapplyの関数

JSのthisのポインタとcallとapplyの関数

Oct 08, 2018 pm 04:25 PM
apply this

この記事では、このポインタの基本的な JS コンテンツと、興味のある友人が学習して参照できる関連知識ポイントを紹介します。

具体的な実務においては、そのポイントは関数の定義時点では決定できず、関数の実行時に決定されますが、実行環境に応じて大きく以下の3種類に分けられます。

##1. 関数が通常の関数として呼び出される場合、これはグローバル オブジェクトを指します。


##2. 関数がオブジェクトのメソッドとして呼び出される場合、これはグローバル オブジェクトを指します。オブジェクト


#3 を指します。関数がコンストラクターとして呼び出される場合、これは新しく作成されたオブジェクト


例 1:

# を指します。 ##

window.name = 'myname';
function getName() {
  console.log(this.name);
}
getName(); //输出myname
ログイン後にコピー
例 2:

var boy = {
  name: 'Bob',
  getName: function() {
    console.log(this.name);
  }
}
boy.getName(); //输出Bob
ログイン後にコピー
例 3:

function Boy(name) {
  this.name = name;
}
var boy1 = new Boy('Bob');
console.log(boy1.name); //输出Bob
ログイン後にコピー
例 3 には、別の特殊なケースがあります。 、コンストラクターが「return」を通じてオブジェクトを返すとき、その時点で、この操作の最終結果は、新しく作成されたオブジェクトではなく、このオブジェクトを返すため、この場合、これは役に立ちません。


例 4:

function Boy(name) {
  this.name = name;
  return { //返回一个对象
    name: 'Jack'
  }
}
var boy1 = new Boy('Bob');
console.log(boy1.name); //输出Jack
ログイン後にコピー
例 5:

function Boy(name) {
  this.name = name;
  return 1; //返回非对象
}
var boy1 = new Boy('Bob');
console.log(boy1.name); //输出Bob
ログイン後にコピー

呼び出しと適用

apply の役割は 2 つのパラメータを受け入れます。最初のパラメータは、関数本体内の this のポインタを指定します。2 番目のパラメータは、呼び出される関数を渡すために使用される配列です。パラメータリスト。


例 1:

function getInfo() {
  console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}
var boy1 = {
  name: 'Bob',
  age: 12
}
getInfo.apply(boy1,['sing','swimming']); //输出Bob like sing and swimming
ログイン後にコピー
call 渡されるパラメータの数は固定ではありません。apply と同様に、最初のパラメータも指定に使用されます。関数本体では、2 番目のパラメーターから開始して、各パラメーターが呼び出された関数に順番に渡されます。


例 2:

function getInfo() {
  console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}
var boy1 = {
  name: 'Bob',
  age: 12
}
getInfo.call(boy1,'sing','shopping'); //输出Bob like sing and shopping
ログイン後にコピー
さらに、ほとんどの高度なブラウザでは、bind メソッドも実装されています。call および apply との違いは、bind は変更のみを行うことです。 Internal this が指す関数ですが、すぐには実行されないため、明示的に呼び出す必要があります。

#例 3: ブラウザのバインド メソッドをシミュレートする

Function.prototype.bind = function(obj){
  var self = this;
  return function(){
    return self.apply(obj,arguments);
  }
};
var obj = {
  name: 'Bob',
  age: 12
};
var func = function(){
  console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}.bind(obj);
func('sing','shopping');
ログイン後にコピー

#これがありません

#場合によっては、this のポイントが失われることがあります。このとき、this のポイントを変更するには、call、apply、bind を使用する必要があります。 例 1: "getName" メソッドが "boy" オブジェクトのプロパティとして呼び出される場合、これは "boy" オブジェクトを指します。 別の変数が "getName" メソッドを参照する場合、通常の関数呼び出しとして使用されるため、これはグローバル オブジェクト window

var boy = {
  name: 'Bob',
  getName: function() {
    console.log(this.name);
  }
}
boy.getName(); //输出Bob
var getBoyName = boy.getName;
getBoyName(); //输出undefined
ログイン後にコピー

を指します。例 2: 関数が関数内で定義されている場合でも、通常のオブジェクトとして呼び出された場合、これもポイントしますウィンドウ オブジェクトへの

var boy1 = {
  name: 'Bob',
  age: 12,
  getInfo: function() {
    console.log(this.name);
    function getAge() {
      console.log(this.age);
    }
    getAge();
  }
}
boy1.getInfo(); //Bob
        //undefined
ログイン後にコピー

上記はこの章の内容です。すべての内容です。その他の関連チュートリアルについては、

JavaScript ビデオ チュートリアル

をご覧ください。

以上がJSのthisのポインタとcallとapplyの関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java Fluent Mybatis 集計クエリと適用メソッド プロセスの分析例 Java Fluent Mybatis 集計クエリと適用メソッド プロセスの分析例 May 22, 2023 pm 01:31 PM

データの準備:クエリの条件を集約するために、いくつかのデータを追加します。 MIN 最低年齢を取得しようとします。メソッド実装 @OverridepublicIntegergetAgeMin(){Mapresult=testFluentMybatisMapper.findOneMap(newTestFluentMybatisQuery().select.min.age("minAge").end()).orElse(null);returnresult!=null?Convert.toInt(result.get (&qu

Vue2 がこれを通じてさまざまなオプションのプロパティにアクセスできる理由について話しましょう Vue2 がこれを通じてさまざまなオプションのプロパティにアクセスできる理由について話しましょう Dec 08, 2022 pm 08:22 PM

この記事は、vue ソース コードを解釈するのに役立ち、これを使用して Vue2 のさまざまなオプションのプロパティにアクセスできる理由を紹介します。

この点を理解してフロントエンド担当者の7割をキャッチアップした記事 この点を理解してフロントエンド担当者の7割をキャッチアップした記事 Sep 06, 2022 pm 05:03 PM

同僚は、これによって指摘されたバグのために立ち往生しました。Vue2 のこの指摘の問題により、アロー関数が使用され、その結果、対応する props を取得できなくなりました。私がそれを彼に紹介したとき、彼はそれを知りませんでした。その後、私はわざとフロントエンド コミュニケーション グループに目を向けました。これまでのところ、フロントエンド プログラマーの少なくとも 70% はまだそれを理解していません。今日私はそれを共有しますyou this link. もしすべてが間違っている場合 まだ学習していない場合は、大きな口を与えてください。

jQuery でこのキーワードを使用する賢い方法 jQuery でこのキーワードを使用する賢い方法 Feb 25, 2024 pm 04:09 PM

jQuery での this キーワードの柔軟な使用 jQuery では、this キーワードは非常に重要かつ柔軟な概念であり、現在操作されている DOM 要素を参照するために使用されます。このキーワードを合理的に使用することで、ページ上の要素を簡単に操作し、さまざまなインタラクティブな効果や機能を実現できます。この記事では、特定のコード例を組み合わせて、jQuery でのこのキーワードの柔軟な使用方法を紹介します。簡単なこの例 まず、簡単なこの例を見てみましょう。あるとします。

これは何ですか? JavaScript でのこれの詳細な分析 これは何ですか? JavaScript でのこれの詳細な分析 Aug 04, 2022 pm 05:02 PM

これは何ですか?次の記事では、JavaScript でのこれについて説明し、関数の呼び出し方法の違いによる違いについて説明します。

Java でこのメソッドを使用する方法 Java でこのメソッドを使用する方法 Apr 18, 2023 pm 01:58 PM

1. this キーワード 1. this の型: どのオブジェクトが呼び出されるかがそのオブジェクトの参照型 2. 使用法の概要 1. this.data;//アクセス属性 2. this.func();// アクセスメソッド 3.this ( );//このクラス内の他のコンストラクタを呼び出す 3. 使い方の説明 1.this.dataはメンバメソッドで使用しているので、これを追加しないとどうなるかを見てみましょう classMyDate{publicintyear;publicintmonth;publicintday; publicvoidsetDate(intyear, intmonth,intday){はい

JavaScript はこのポインタをどのように変更するのでしょうか? 3 つの方法の簡単な分析 JavaScript はこのポインタをどのように変更するのでしょうか? 3 つの方法の簡単な分析 Sep 19, 2022 am 09:57 AM

JavaScript はこのポインタをどのように変更するのでしょうか?次の記事では、JS でこのポインターを変更する 3 つの方法を紹介します。

JavaScriptのアロー関数で詳しく解説 JavaScriptのアロー関数で詳しく解説 Jan 25, 2024 pm 01:41 PM

JavaScript のアロー関数は比較的新しい構文です。独自の this キーワードはありません。逆に、アロー関数の this は、それを含むスコープ オブジェクトを指します。影響は次のとおりです: 1. アロー関数の this は次のとおりです。 static; 2. アロー関数はコンストラクタとして使用できません; 3. アロー関数はメソッドとして使用できません。

See all articles