2017-07-12 13 views
0

私は自習したJavaScriptをしばらく学習しており、私が作ったキャンバスゲームをリファクタリングし始めました。私のクラスの作成方法が「正しい」かどうかをチェックし、それらを書く方法。適切なJavaScriptオブジェクト

私の質問は、JavaScriptでオブジェクトを作成するための最良の方法であり、どちらがより広く受け入れられているのか、それぞれが使いやすいかどうかです。

クラスの宣言:

これは私がJSで利用可能であった知らなかったものです。

class Person { 
    constructor(name) { 
     this.name = name; 
    } 
} 

let Me = new Person("John"); 

オブジェクトリテラル:

私は、これは一回限りのオブジェクトのために良いです伝えることができるものから。

let Me = { 
    type: "Person", 
    name: "John"; 
}; 

機能対象:

これが正しい名前であるかどうかは知らないが、私はそれを呼び出すために他に何かわかりません。

function Person(name) { 
    this.name = name; 

    this.sayName = function() { 
     return "Hi, my name is " + this.name; 
    }; 
} 

let me = new Person("John"); 

プロトタイプ:私は、彼らは既存のオブジェクトに追加機能を追加するために使用されている伝えることができるものから、

(つまり、JSの数はオブジェクトdefualt上で動作値のマッピング機能)

function Person(name) { 
    this.name = name; 
} 

Person.prototype.sayName = function() { 
    return "Hi, my name is " + this.name; 
}; 

let me = new Person("John"); 
+2

[* ES6クラスを使う理由は何か?](https://stackoverflow.com/questions/30783217/why-should-i-use- es6-classes/30783368?s = 8 | 0.2479#30783368)、[*はjavascriptのプロトタイプパターンの文法的な砂糖だけですか?*](https://stackoverflow.com/questions/36419713/are-es6-classes) -just-syntactic-sugar-for-the-prototypal-pattern-in-javascript?s = 10 | 0.2341)を使用します。あなたの "Function Object"メソッドはコンストラクタ(すべてのネイティブ関数はコンストラクタです)と呼ばれ、プロトタイプと同じ概念の側面です。 – RobG

+1

ところで、これに対する答えは非常に主観的です(あなたの "ベスト"の基準は何ですか?) – RobG

+0

この一連の動画は役立つかもしれません。 https://www.youtube.com/playlist?list=PL0zVEGEvSaeHBZFy6Q8731rcwk0Gtuxub – user2875289

答えて

1

すでにオブジェクトリテラルの欠点を特定しています。オブジェクトは1つだけ作成されます。しばしばこれがあなたが望むものですが、多くの共有オブジェクトを持つ複数のオブジェクトが必要なときは、関数を使いたいでしょう。

class構文は基本的にコンストラクタ+プロトタイプ構文の構文的砂糖です。彼らはほぼ同じことをしますが、違いはclassでより単純な構文といくつかの保護手段を提供しますが、下位互換性は低くなります。

内部で作成されたメソッドを持つコンストラクタは、通常は使用しないでください。違いについては、Use of 'prototype' vs. 'this' in JavaScript?を参照してください。

関連する問題