2016-05-19 6 views
0

私が持っているこの知識のギャップを記入してください:ES6でのクラスの導入は、オブジェクト作成をどのように変更し、クラスを使用するリアクションなどのフレームワークはどうでしょうか?

ECMA5のように、Object.create()は、渡される値が作成されたオブジェクトのプロトタイプとなるため、オブジェクトを作成する標準的な方法です構築されたオブジェクトのプロトタイプに作成されたオブジェクトのプロトタイプ点を行います「新しい」コンストラクタを使用して

VS

をポイントします。また、newを使用すると、関数内でコンストラクタコードが実行されます。

今、ECMA6と、私が知っているクラスの導入は構文的な砂糖だけで、まだObject.create()を使用する標準ですか? Imは、クラスが関数コンストラクタの文法的な砂糖だけであると仮定したり、オブジェクトを作成するために 'new'メソッドを使用するのと同じです。

この場合、Reactなどのフレームワークでは、Object.createが効率的な場合、クラスを使用するのはなぜですか?

+0

なぜ 'Object.create'がより効率的だと思いますか?それはES5日でもなかった。 – Bergi

+0

"*' Object.create(foo)==新しいFoo(Object.prototype) '*" - 全くありません。 – Bergi

答えて

1

ES6クラスは構文砂糖ではありませんが、ES5では従来のプロトタイプベースの構造に変換されますが、ネイティブES6サポートでははるかに効率的です。

Reactのクラスを使用してこの構文に慣れると、今後数年間で完全にサポートされるネイティブメカニズムとなるでしょう。

オブジェクトの作成自体のために、Object.createnewを使用できます。オブジェクトリテラルも含みます。 閉鎖されたオブジェクトファクトリを持つ方法は、現在、「クリーンコード推奨」の1つです。カップリング、ローカル(「プライベート」)変数とメソッドをよりよく制御できる利点があります。

+0

それでは明確にする:オブジェクトファクトリはクラスに委譲され、継承の必要がない場合はオブジェクトリテラルを使用するだけですか?ですから、object.create()はほとんど廃止されました。 –

+0

これらのメソッドのどちらかが廃止されたことは決して悲しいことではありません。パフォーマンスに達していない限り、ほとんどのオブジェクトを生成するには 'closure'を使用してください。この場合、 'Object.create'はAFAIKが最速です。それにもかかわらず、パフォーマンスと組み合わせた古典的なコンストラクタが必要な場合があります。 – Marcus

0

あなたが言ったように、classはコンストラクタ用の構文砂糖です。彼らは全く絵を変えない。そう、

また、関数に新しい実行にコンストラクタコードを使用して

やニーズこれに反応:時々あなたがnewを使用したいと思うでしょう、時にはあなたはObject.createを使用したいと思うでしょう、彼らは別のことを行います彼らはコンストラクタを使用します。

関連する問題