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

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

DDD
リリース: 2024-12-26 03:24:08
オリジナル
639 人が閲覧しました

How Does the `this` Keyword Behave Inside a JavaScript Object Literal?

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

JavaScript では、「this」キーワードは現在のオブジェクトを参照します関数が呼び出されたもの。ただし、「this」のバインドは、特にオブジェクト リテラル内で使用される場合に混乱を招く可能性があります。

オブジェクト リテラル内では、「this」の値はオブジェクト自体にバインドされず、グローバル オブジェクトにバインドされます (ブラウザのウィンドウ)。これにより、次のコードに見られるように、予期しない動作が発生する可能性があります:

var obj1 = {
  foo: new Date(),
  bar: new MyDate(this.foo)  //  this.foo is undefined
};
ログイン後にコピー

この例では、「this」がグローバル オブジェクトを参照しているため、「this.foo」は MyDate のコンストラクター内で未定義です。 "foo" という名前のプロパティがありません。

この問題を解決するには、bind() を使用してオブジェクト リテラル内で "this" を明示的にバインドします。 method:

var obj4 = {};
obj4.foo = new Date();
obj4.bar = new MyDate(obj4.foo.bind(obj4));
ログイン後にコピー

これにより、MyDate のコンストラクター内の "this" が正しいオブジェクト (obj4) を参照するようになります。

あるいは、アロー関数を使用して "this" をバインドすることもできます。オブジェクトへ:

var obj3 = {
  foo: new Date(),
  bar: new MyDate(() => this.foo)
};
ログイン後にコピー

アロー関数では、「this」は定義時に周囲のスコープにバインドされます。 case はオブジェクト自体です。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート