ホームページ > ウェブフロントエンド > jsチュートリアル > オブジェクト リテラル関数の「this」と「obj」: いつどちらを使用する必要がありますか?

オブジェクト リテラル関数の「this」と「obj」: いつどちらを使用する必要がありますか?

Patricia Arquette
リリース: 2024-11-28 19:42:12
オリジナル
981 人が閲覧しました

`this` vs. `obj` in Object Literal Functions: When Should I Use Which?

独自の関数内のオブジェクト リテラル参照: 'this' と 'obj' の比較

オブジェクト リテラル内で関数を定義する場合、オブジェクトを「this」として参照するか、「obj」を直接使用して参照するかという問題が発生する可能性があります。どちらのアプローチでも同じ結果が得られるように見えますが、考慮すべき潜在的な影響があります。

関数内での 'this' の参照

関数内での 'this' の使用関数は常にオブジェクトのメソッドとして呼び出されることを前提としています。このアプローチでは、オブジェクト コンテキストの外で関数を呼び出すときに問題が発生する可能性があります。例:

var obj = {
  key1: "it",
  key2: function() { return this.key1 + " works!"; }
};

var func = obj.key2;  // Assign function to a new reference
alert(func());        // Error: Reference lost outside of object context
ログイン後にコピー

関数内での 'obj' の参照

関数内で 'obj' を直接参照すると、前の例で直面した問題が解決されます。ただし、別の懸念事項が生じます。

var obj = {
  key1: "it",
  key2: function() { return obj.key1 + " works!"; }
};

var newref = obj;
obj = { key1: "something else"; };

alert(newref.key2()); // Outputs "something else works"
ログイン後にコピー

この場合、'obj' によって参照されるオブジェクトが変更された場合、関数は更新されたオブジェクト プロパティを引き続き使用します。これにより、特に関数の有効期間中にオブジェクト参照が変更された場合、予期しない動作が発生する可能性があります。

最適なアプローチの選択

「this」を参照するかの選択「obj」は、特定のコンテキストと各アプローチに関連する潜在的なリスクによって異なります。関数がオブジェクト コンテキスト内でのみ使用されることを目的としている場合は、「this」を使用することをお勧めします。ただし、関数がオブジェクト コンテキストの外部で使用される可能性がある場合、またはオブジェクト参照を変更するリスクがある場合は、「obj」を直接参照する方が安全な方法です。

オブジェクトの整合性の確保

オブジェクトの整合性を維持することが重要なシナリオでは、次の点を考慮してください。 options:

  • ES6 Const: オブジェクト内で let とともに const キーワードを使用すると、オブジェクト参照を再割り当てできなくなります。
  • Closure: クロージャを使用して関数内のオブジェクト参照のスコープを設定すると、安全で分離されたオブジェクトが提供されます。環境.
  • バインディング: .bind() を使用して関数をオブジェクトにバインドすると、関数が常に正しいコンテキスト内で動作することが保証されます。

以上がオブジェクト リテラル関数の「this」と「obj」: いつどちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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