私はJavaScriptのバックグラウンドを持つES6から始めています。質問があります。私は次のようなES6クラスを持っています:
class User{
constructor(){
}
doSomething(){
}
}
私の質問は、このオブジェクトをインスタンス化するたびにdoSomething
メソッドが作成されるのですか?以前のJSでは、doSomething
を取り出して「プロトタイプ」で作成し、オブジェクトをインスタンス化するたびにではなく、doSomething
が1回作成されるようにすることができました。ただし、ES6で同じ効果を実現する正しい方法については確信があります。どんな助けでもいただければ幸いです。
私の質問は、このオブジェクトをインスタンス化するたびに「doSomething」メソッドが作成されるのですか?
いいえ。class
構文は、コンストラクター関数+プロトタイプの場合、多かれ少なかれ 構文糖衣構文 です。つまり結果は(ほぼ)同等です:
function User() {}
User.prototype.doSomething = function() { };
結果を見てくださいChromeは以下を生成します:
ただし、ES6で同じ効果を実現する正しい方法については確信があります。
言ったように、class
はあなたのためにそれをします。 class
を導入することの全体的なポイントは、コンストラクター関数の作成とprototype
でのメソッドの設定を簡単にすることです(したがって、シンタックスシュガー)。
詳細を知りたい場合は、をご覧ください
ECMAScript 6で導入されたJavaScriptクラスは、JavaScriptの既存のプロトタイプベースの継承に対する構文上の糖衣です。クラス構文はnotであり、JavaScriptに新しいオブジェクト指向の継承モデルを導入しています。 JavaScriptクラスは、オブジェクトを作成して継承を処理するための、はるかに単純で明確な構文を提供します。
絶対違う。 ES6で手動でプロトタイプを作成するためのバインド方法はもうないようですが、実際にはES6はバックグラウンドでそれを行うのに役立ちます。
MDNが言うように:
ECMAScript 6で導入されたJavaScriptクラスは、JavaScriptの既存のプロトタイプベースの継承に対する構文上の糖衣です。クラス構文は、JavaScriptに新しいオブジェクト指向の継承モデルを導入していません。 JavaScriptクラスは、オブジェクトを作成して継承を処理するための、はるかに単純で明確な構文を提供します。