2017-08-10 8 views
-1

オブジェクトリテラルを使用してコンストラクタ関数を使用して(理論的に)オブジェクトを作成する方法と、それぞれを使用する方法の違いは何ですか?オブジェクトリテラル - Vs - コンストラクタ関数

私はそれらの使用方法を意味するものではありません。私は彼らがどのようにシーンの裏で働くのか、彼らの仕組みがどのように異なるのかを意味します。

+0

[多くの重複](https://stackoverflow.com/search?q=%5Bjavascript%5D+literal+vs+constructor)があります。 – RobG

+0

私はそれらを使用する方法について話していません。私はそれらの両方を使うとき、jsの中で何が起こるのか話しています。私は私の質問をしました。なぜなら、私が探しているポイントについて他の質問は意味していないことがわかったからです... 私の質問は重複していません! –

+0

あなたが答える気になれば、質問は編集されました。 –

答えて

1

基本的に - ES2015以前 - オブジェクトリテラルを使用してオブジェクトを作成するとき、オブジェクトにメソッドを追加できませんでした。

ES2015のとして、かなり近いオブジェクトリテラルとクラス宣言を行っている、リテラルをオブジェクトにメソッドを追加することが可能である:

var obj = { 
    // __proto__ 
    __proto__: theProtoObj, 
    // Shorthand for ‘handler: handler’ 
    handler, 
    // Methods 
    toString() { 
    // Super calls 
    return 'd ' + super.toString(); 
    }, 
    // Computed (dynamic) property names 
    [ 'prop_' + (() => 42)() ]: 42 
}; 

あなたはクラスのインスタンスを作成したいときには、別の重要なことがある - あなたが希望そのクラス宣言に基づいてクラス宣言とinitオブジェクトを作成したい。

+0

ECMAScript 2015で導入された機能を指摘しておきましょう。ほとんどの複製は少し古くなっています。オブジェクトイニシャライザの追加機能は[* MDN *](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer)にも記載されています。ただし、「__proto__」の使用には注意が必要です。これは、ECMA-262 *の付録に記載されています(http://ecma-international.org/ecma-262/8.0/#sec-__proto__-property-names-オブジェクト内イニシャライザ)。 – RobG

関連する問題