ホームページ >ウェブフロントエンド >jsチュートリアル >「this」キーワードは JavaScript オブジェクト リテラルでどのように動作しますか?

「this」キーワードは JavaScript オブジェクト リテラルでどのように動作しますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-13 21:48:21629ブラウズ

How Does the `this` Keyword Behave in JavaScript Object Literals?

JavaScript オブジェクト リテラルにおける「this」キーワードの動作

オブジェクト リテラル内では、「this」キーワードはオブジェクトのプレースホルダーとして機能します自体。ただし、その動作は呼び出される条件によって異なる場合があります。

コード内:

var MyDate = function(date) {
    this.date = date;
};

var obj1 = {
    foo: new Date(),
    bar: new MyDate(this.foo)  //  this.foo is undefined
};

var obj2 = {};
obj2.foo = new Date();
obj2.bar = new MyDate(this.foo);  //  this.foo is undefined

var obj3 = {
    foo: new Date(),
    bar: new MyDate(obj3.foo)
};

var obj4 = {};
obj4.foo = new Date();
obj4.bar = new MyDate(obj4.foo);

「この」バインディングについて

JavaScript の "this" キーワードは遅延バインディングを示します。これは、関数が呼び出されるまでその値が決定されないことを意味します。あなたの場合:

シナリオ 1 と 2:

  • 「obj1」と「obj2」では、「new MyDate」内の「this」キーワード関数は特定のオブジェクトのメソッドとして呼び出されないため、グローバル オブジェクト (つまり「ウィンドウ」) を参照します。グローバル オブジェクトには「foo」という名前のプロパティがないため、未定義のエラーが発生します。

シナリオ 3 および 4:

  • In 「obj3」と「obj4」、「new MyDate」関数が次のように呼び出されるため、「this」キーワードはそれぞれのオブジェクトを正常に参照します。これらのオブジェクトのメソッド。したがって、「this.foo」は各オブジェクト内の「foo」プロパティに正しくアクセスします。

結論

オブジェクト内の「this」キーワードの動作リテラルは、関数が呼び出されるコンテキストによって異なります。オブジェクトに明示的にバインドされていない場合は、デフォルトでグローバル オブジェクトが使用されます。ただし、オブジェクトのメソッドとして呼び出された場合は、その特定のオブジェクトを参照し、オブジェクトのプロパティとメソッドへの適切なアクセスが保証されます。

以上が「this」キーワードは JavaScript オブジェクト リテラルでどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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