メソッドがコンストラクターに記述される場合は、関数内のメソッドと呼ばれ、メソッドがプロトタイプ属性に記述される場合は、プロトタイプのメソッドと呼ばれます。
•関数内のメソッド:関数内のメソッドを使用すると、関数内のプライベート変数にアクセスできます。オブジェクトが新しいコンストラクターを使用して、コンストラクター内のプライベート変数を操作するように要求する場合は、この時点で関数内のメソッドを使用することを検討する必要があります。
•プロトタイプの方法:関数を介して多数のオブジェクトを作成する必要がある場合、これらのオブジェクトには多くの方法があります。現時点では、これらのメソッドを関数のプロトタイプに追加することを検討する必要があります。この場合、コードは比較的小さなメモリを消費します。
•実際のアプリケーションでは、これら2つの方法が組み合わせて使用されることがよくあります。したがって、最初に必要なものを理解し、それを使用する方法を選択する必要があります。
// constructor afnction a(name){this.name = name || 'A'; this.sayhello = function(){console.log( 'こんにちは、私の名前は' + this.name); }} // constructor bfunction b(name){this.name = name || 'b';} b.prototype.sayhello = function(){console.log( 'hello、my name is:' + this.name);}; var a1 = new a( 'a1'); var a2 = new a( 'a2'); a1.sayhello(); a2.sayhello(); var b1 = new b( 'b1'); b( 'b2'); b1.sayhello(); b2.sayhello();私は2つのコンストラクターを書きましたが、最初はAです。 2番目はコンストラクターBです。この方法では、コンストラクターBのプロトタイププロパティに関するHelloを書き込みます。コンストラクター内でメソッドを作成すると、コンストラクターを介してオブジェクトを初期化するコストが増加し、プロトタイププロパティにメソッドを作成すると、このコストが効果的に削減されます。オブジェクト上のメソッドを呼び出すことは、プロトタイプチェーンでメソッドを呼び出すよりもはるかに高速であると考えるかもしれませんが、そうではありません。オブジェクトに多くのプロトタイプがない場合、それらの速度は実際に似ています。
さらに、注意すべきことがいくつかあります。
•まず、関数のプロトタイププロパティのメソッドを定義する場合、メソッドを変更すると、このコンストラクターによって生成されたすべてのオブジェクトのメソッドが変更されることを忘れないでください。
•別のポイントは、変動改善の問題です。次のコードを見ることができます。
func1(); //関数が実行されたときにFUNC1に値が割り当てられていないため、ここでエラーが報告されます。エラー:func1はfunctionvar func1 = function(){console.log( 'func1');}; func2(); //これは、関数の宣言が宣伝されるため、正しく実行されます。•オブジェクトのシリアル化の問題に関して。関数のプロトタイプで定義された属性はシリアル化されません。次のコードを見ることができます。
関数a(name){this.name = name;} a.prototype.say what = 'say what ...'; var a = new a( 'dreamapple'); console.log(json.stringify(a));出力は{"name": "dreamapple"}であることがわかります。
上記の記事では、JSコンストラクターのメソッドとプロトタイプについて簡単に説明しています。私があなたと共有したすべてのコンテンツです。私はそれがあなたに参照を与えることができることを願っています、そしてあなたがwulin.comをもっとサポートできることを願っています。