es6エクスポートされたオブジェクト値は更新されていませんか?

numblock

ES6でファクトリ関数をエクスポートしています。これは、プロパティを持つオブジェクトを返します。ファクトリを呼び出すと、オブジェクトが作成されますが、その値は更新されません。

例:

// factory.js
let counter = 1;
let factory = () => {
    let increment = function(){
      counter++;
    }

  return { counter, increment };
}

export default factory;


// main.js
import factory from './factory';

let f = factory();
console.log(f.counter); // =>1
f.increment();
console.log(f.counter); // => stil 1, not 2?

誰かがこれが起こっている理由を説明できますか?それはES6の機能ですか、それともwebpackとbabel(es2015-preset)を使用しているという事実と関係がありますか?

私はこれを見つけましたが、それは同じユースケースを説明していません:http//exploringjs.com/es6/ch_modules.html#sec_imports-as-views-on-exports

JavaScriptでは、プリミティブ型値によって渡されます

let counter = 1;

let factory = () => {

  ...

  // The property `counter` in this object gets passed a value of the `counter` declared in the scope of `factory.js`.
  // It does not get a reference.
  return { counter, increment };
}

あなたがからオブジェクトを返すときにfactory機能、そのプロパティがcounter割り当てられている値をからcounterのスコープで宣言しましたfactory.jsこれは、本質的に意味counterオブジェクトのプロパティは、受信したコピーの値リンクは何もありません-値のをcounter変数とcounterプロパティが。

let counter = 1;

let factory = () => {
  let increment = function () {
    // The `++` operates on the `counter` variable declared in the scope of `factory.js`.
    // There is no link between the value `counter` in the scope of `factory.js` and the `counter` as the property of the object returned.
    // As a result when the `counter` variable is incremented, the `counter` property remains the same as the value initially passed to it.
    counter++;
  };
};

あなたがインクリメントするとcounter、あなたはのスコープで宣言された変数の値をインクリメントしていますfactory.js変数の値があるNumberため、原始的です。プリミティブ値は値によって渡されるため、変数counterとプロパティの間にリンクはありませんcounter

うまくいけば、すべてのことは、理にかなっています。あなたには、いくつかのより多くのこの考え方に読んでくださいしたい場合は値渡し(に比べて参照渡し)は、次のStackOverflowの質問を見ることができます:

この時点で、どうすればこれを修正できますか?

代わりに、インクリメントのcounterあなたをインクリメントする必要がありますthis.counterこのような:

let increment = () => {
  this.counter++;
};

コンテキストはので、これは動作しますthis関数から返されるオブジェクトですfactorycounterプロパティを使用すると、呼び出しの結果を割り当てた変数にありますfactory

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

「overlay」は「namespace:sp」からエクスポートされたオブジェクトではありません

分類Dev

ジェストは、インポートされたオブジェクトという名前のes6をモックします

分類Dev

MATLABクラスオブジェクトは更新されていません

分類Dev

ES6はオブジェクトからすべての値をエクスポートします

分類Dev

エクスポートされたオブジェクトはjavascriptの関数を認識しません

分類Dev

R:オブジェクト 'set_global_graph_attrs'は 'namespace:DiagrammeR'からエクスポートされません

分類Dev

エラーオブジェクト配列は現在Pythonでサポートされていません

分類Dev

D3:データオブジェクトの値は変更されましたが、テーブルで更新されていません

分類Dev

ES6のインポートとエクスポートはNode.jsではサポートされていません

分類Dev

オブジェクト値が正しく更新されていません

分類Dev

setStateはネストされたオブジェクトを更新しません

分類Dev

オブジェクトの名前変更はAzureSQL Data Warehouseでサポートされていませんか?

分類Dev

JavaScriptオブジェクトのプロパティはIEでサポートされていませんか?

分類Dev

QMLレポートReferenceError:XYZはコンテキストに追加されたC ++オブジェクトで定義されていません

分類Dev

Python:WinError 10045:試行された操作は、参照されているオブジェクトのタイプではサポートされていません

分類Dev

リアクティブフォーム配列オブジェクトは更新されましたが、フロントエンドで仮想スクロールリストが更新されていません

分類Dev

ネストされたオブジェクトは、Spring JpaRepositoryによって保存されていません

分類Dev

ES6でネストされたオブジェクトをインポートする方法

分類Dev

C ++エラー:抽象クラスタイプのオブジェクトは許可されていません

分類Dev

シェル変数はサブシェルからエクスポートされていませんか?

分類Dev

Angularサービスの公開オブジェクトリテラルが更新されていませんか?

分類Dev

Angular:子コンポーネントで渡されたオブジェクトのプロパティを更新すると、親コンポーネントが更新されますが、その値は更新されません。なぜですか?

分類Dev

Angular:子コンポーネントで渡されたオブジェクトのプロパティを更新すると、親コンポーネントが更新されますが、その値は更新されません。なぜですか?

分類Dev

Undefinedはオブジェクトではありません。ロード後にフックによって更新されたオブジェクトにアクセスするにはどうすればよいですか?

分類Dev

Shinydashboard: 'restoreInput'は 'namespace:shiny'からエクスポートされたオブジェクトではありません

分類Dev

「data」は「namespace:my_package」からエクスポートされたオブジェクトではありません

分類Dev

'MASS :: predict.lda'は 'namespace:MASS'からエクスポートされたオブジェクトではありません

分類Dev

クラスオブジェクトを3つの異なるリストに追加しましたが、値は変更されていませんか?

分類Dev

エラー:「オブジェクト」はこのスコープで宣言されていません(C ++)

Related 関連記事

  1. 1

    「overlay」は「namespace:sp」からエクスポートされたオブジェクトではありません

  2. 2

    ジェストは、インポートされたオブジェクトという名前のes6をモックします

  3. 3

    MATLABクラスオブジェクトは更新されていません

  4. 4

    ES6はオブジェクトからすべての値をエクスポートします

  5. 5

    エクスポートされたオブジェクトはjavascriptの関数を認識しません

  6. 6

    R:オブジェクト 'set_global_graph_attrs'は 'namespace:DiagrammeR'からエクスポートされません

  7. 7

    エラーオブジェクト配列は現在Pythonでサポートされていません

  8. 8

    D3:データオブジェクトの値は変更されましたが、テーブルで更新されていません

  9. 9

    ES6のインポートとエクスポートはNode.jsではサポートされていません

  10. 10

    オブジェクト値が正しく更新されていません

  11. 11

    setStateはネストされたオブジェクトを更新しません

  12. 12

    オブジェクトの名前変更はAzureSQL Data Warehouseでサポートされていませんか?

  13. 13

    JavaScriptオブジェクトのプロパティはIEでサポートされていませんか?

  14. 14

    QMLレポートReferenceError:XYZはコンテキストに追加されたC ++オブジェクトで定義されていません

  15. 15

    Python:WinError 10045:試行された操作は、参照されているオブジェクトのタイプではサポートされていません

  16. 16

    リアクティブフォーム配列オブジェクトは更新されましたが、フロントエンドで仮想スクロールリストが更新されていません

  17. 17

    ネストされたオブジェクトは、Spring JpaRepositoryによって保存されていません

  18. 18

    ES6でネストされたオブジェクトをインポートする方法

  19. 19

    C ++エラー:抽象クラスタイプのオブジェクトは許可されていません

  20. 20

    シェル変数はサブシェルからエクスポートされていませんか?

  21. 21

    Angularサービスの公開オブジェクトリテラルが更新されていませんか?

  22. 22

    Angular:子コンポーネントで渡されたオブジェクトのプロパティを更新すると、親コンポーネントが更新されますが、その値は更新されません。なぜですか?

  23. 23

    Angular:子コンポーネントで渡されたオブジェクトのプロパティを更新すると、親コンポーネントが更新されますが、その値は更新されません。なぜですか?

  24. 24

    Undefinedはオブジェクトではありません。ロード後にフックによって更新されたオブジェクトにアクセスするにはどうすればよいですか?

  25. 25

    Shinydashboard: 'restoreInput'は 'namespace:shiny'からエクスポートされたオブジェクトではありません

  26. 26

    「data」は「namespace:my_package」からエクスポートされたオブジェクトではありません

  27. 27

    'MASS :: predict.lda'は 'namespace:MASS'からエクスポートされたオブジェクトではありません

  28. 28

    クラスオブジェクトを3つの異なるリストに追加しましたが、値は変更されていませんか?

  29. 29

    エラー:「オブジェクト」はこのスコープで宣言されていません(C ++)

ホットタグ

アーカイブ