2016-12-17 8 views
5

JavaScriptのバックグラウンドを持つES6からはじまりました。質問があります。ES6のプロトタイプに相当する

class User{ 
constructor(){ 
} 

doSomething(){ 
} 
} 

私の質問はdoSomething方法は、我々はこのオブジェクトをインスタンス化するたびに作成されますんです:私は次のようES6のクラスがありますか?以前のJSでは、doSomethingを取り出し、オブジェクトをインスタンス化するたびにではなく、doSomethingが確実に作成されるように「prototype」で作成しました。しかし、私はES6で同じ効果を達成する正しい方法について確信しています。どんな助けもありがとう。

答えて

10

私の質問は、このオブジェクトをインスタンス化するたびに「doSomething」メソッドが作成されますか?

号はclass構文は、多かれ少なかれだけsyntactic sugarコンストラクタ関数+プロトタイプのためのものです。私。結果は(ほとんど)相当:しかし

enter image description here

、私は同じ効果を達成するための正しい方法について確認してください注意してください午前:クロムが生成する結果で

function User() {} 
User.prototype.doSomething = function() { }; 

ルックES6。

このように、classはそれを行います。 classの導入のポイントは、コンストラクタ関数の作成とメソッドの設定を容易にすることです(したがって、構文砂糖)。prototypeにメソッドを設定します。 JavaScriptのの既存のプロトタイプベースの継承を超える構文砂糖は


あなたが詳細を知りたい場合は

は、

  • MDN - Classes

    のECMAScript 6で導入されたJavaScriptのクラスを見ています。クラスの構文はで、ではJavaScriptに新しいオブジェクト指向の継承モデルを導入していません。 JavaScriptクラスは、オブジェクトを作成して継承を処理するためにはるかに簡単で分かりやすい構文を提供します。絶対に

  • YDKJS - ES6 & Beyond

+0

「クラス」を[構文上の毒](https://github.com/joshburgess/not-awesome-es6-classes)とみなす人はいます。 – 4castle

+3

@ 4castle:これは意見であり、この質問とは無関係です。 –

+0

これは、OPがES6でそれを行う「正しい」方法を求めているためです。つまり、引数の両側を表示する必要があります。 – 4castle

2

ません。これは、ES6で手作業で試作するための拘束力のある方法ではないようですが、ES6はバックグラウンドでこれを行うのに役立ちます。 MDNが言うように
:ECMAScriptの6で導入され

をJavaScriptのクラスには、JavaScriptの既存のプロトタイプベースの継承を介して構文砂糖です。クラス構文では、JavaScriptに新しいオブジェクト指向の継承モデルが導入されていません。 JavaScriptクラスは、オブジェクトを作成して継承を処理するためにはるかに簡単で分かりやすい構文を提供します。

関連する問題