2017-07-25 4 views
0

私のプロジェクトでImmutable.jsを使用し、プレーンなJS構造を使用しないようにしています。機能を持つオブジェクトに不変性を使用する必要がありますか?

しかし、関数を含むオブジェクトだけを不変のものに変換することが意味をなさないかどうかはわかりません。

のは、私がMathUtility.jsを持っているとしましょう:

export default { 
    sum (a, b) { 
    return a + b 
    }, 
    min (a, b) { 
    return a - b 
    } 
//etc. More utils methods 
} 

は、代わりにこのような何かを行うには何の意味です:

export default Immutable.fromJS({ 
    sum (a, b) { 
    return a + b 
    }, 
    min (a, b) { 
    return a - b 
    } 
//etc. More utils methods 
}) 

私のPOVから、それが機能からデータを分割するのは難しい(データオブジェクトではありませんJSでは時折)、それを行うにはポイントがありませんが、わかりません。

ありがとうございます。

+2

もしあなたが 'MathUtility 'のようなヘルパー関数になるのであれば、あなたは'不変 'は必要ないと言います。冗長だと思われる –

+2

もっと難しくしたい場合は、['Object.freeze'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)を使うことができますあなたのユーティリティオブジェクトを後で変更する人がいると思います。 –

+1

私は、各機能を別々にエクスポートしたいと思います。これは、拘束力のある永続化を実現するだけでなく、 – marzelin

答えて

1

いいえ、これらを不変オブジェクトに変換する際の値は表示されません。実際には、かなり大きな欠点があります。これらのユーティリティ関数を直接呼び出すことはできません。あなたの例を使用して

:かなり厄介な私見だ

var utils = Immutable.fromJS({ 
    sum (a, b) { 
    return a + b; 
    }, 
    min (a, b) { 
    return a - b; 
    } 
}); 

utils.sum; // => undefined 
utils.get('sum'); // => function 
utils.get('sum')(1, 2) // => 3 

+0

実際には、 'utils'をインポートした後に' .toJS() 'を実行するかもしれませんが、よろしいですか? –

関連する問題