web-dev-qa-db-ja.com

ES6のプロトタイプに相当

私はJavaScriptのバックグラウンドを持つES6から始めています。質問があります。私は次のようなES6クラスを持っています:

class User{
 constructor(){
 }

 doSomething(){
 }
}

私の質問は、このオブジェクトをインスタンス化するたびにdoSomethingメソッドが作成されるのですか?以前のJSでは、doSomethingを取り出して「プロトタイプ」で作成し、オブジェクトをインスタンス化するたびにではなく、doSomethingが1回作成されるようにすることができました。ただし、ES6で同じ効果を実現する正しい方法については確信があります。どんな助けでもいただければ幸いです。

8
fur866

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

いいえ。class構文は、コンストラクター関数+プロトタイプの場合、多かれ少なかれ 構文糖衣構文 です。つまり結果は(ほぼ)同等です:

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

結果を見てくださいChromeは以下を生成します:

enter image description here

ただし、ES6で同じ効果を実現する正しい方法については確信があります。

言ったように、classはあなたのためにそれをします。 classを導入することの全体的なポイントは、コンストラクター関数の作成とprototypeでのメソッドの設定を簡単にすることです(したがって、シンタックスシュガー)。


詳細を知りたい場合は、をご覧ください

  • MDN-クラス

    ECMAScript 6で導入されたJavaScriptクラスは、JavaScriptの既存のプロトタイプベースの継承に対する構文上の糖衣です。クラス構文はnotであり、JavaScriptに新しいオブジェクト指向の継承モデルを導入しています。 JavaScriptクラスは、オブジェクトを作成して継承を処理するための、はるかに単純で明確な構文を提供します。

  • YDKJS --ES6&Beyond

14
Felix Kling

絶対違う。 ES6で手動でプロトタイプを作成するためのバインド方法はもうないようですが、実際にはES6はバックグラウンドでそれを行うのに役立ちます。
MDNが言うように:

ECMAScript 6で導入されたJavaScriptクラスは、JavaScriptの既存のプロトタイプベースの継承に対する構文上の糖衣です。クラス構文は、JavaScriptに新しいオブジェクト指向の継承モデルを導入していません。 JavaScriptクラスは、オブジェクトを作成して継承を処理するための、はるかに単純で明確な構文を提供します。

3
markjiang