次の 2 つの書き方の本質的な違いがわかりません。
上記の記述方法では、プロトタイプを使用して、インスタンス化されたオブジェクトが親クラスの関数を呼び出せるようにしています。
次のメソッドはプロトタイプを渡しませんが、使用方法はまったく同じです。
この 2 つはどのような点で比較できますか?アドバイスをお願いします、ありがとうございます!
走同样的路,发现不同的人生
メモリの節約に違いがあります
最初の方法であるプロトタイプ定義では、すべての子孫がメソッド定義を共有します。このメソッド定義は、作成したインスタンスの数に関係なく、メモリ内の 1 つの領域のみを占有し、すべてのインスタンスの age メソッドはこのメモリ アドレスを指します。
2 番目のメソッドはコンストラクターで定義され、インスタンスが作成されるたびに、age メソッドの定義によってインスタンスに排他的なスペースが割り当てられます。より多くのインスタンスが作成されると、メモリも比例して増加します。
まとめると、よくある方法であればプロトタイプに入れてください。
2 番目の記述方法はコンストラクター パターンで、使いやすいですが、このメソッドの主な問題は、各メソッドをインスタンスごとに再作成する必要があることです。 最初のプロトタイプ パターンのアプローチでは、すべてのオブジェクト インスタンスがそれに含まれるプロパティとメソッドを共有できるようにすることで、この問題を解決します。
簡単に言えば、ほとんどの場合、メソッドがプロトタイプに記述され、プロパティがコンストラクターに記述されることを除いて、関数は同じです。そのため、最初のメソッドがより一般的に使用されます
メモリの節約に違いがあります
最初の方法であるプロトタイプ定義では、すべての子孫がメソッド定義を共有します。このメソッド定義は、作成したインスタンスの数に関係なく、メモリ内の 1 つの領域のみを占有し、すべてのインスタンスの age メソッドはこのメモリ アドレスを指します。
2 番目のメソッドはコンストラクターで定義され、インスタンスが作成されるたびに、age メソッドの定義によってインスタンスに排他的なスペースが割り当てられます。より多くのインスタンスが作成されると、メモリも比例して増加します。
まとめると、よくある方法であればプロトタイプに入れてください。
2 番目の記述方法はコンストラクター パターンで、使いやすいですが、このメソッドの主な問題は、各メソッドをインスタンスごとに再作成する必要があることです。
最初のプロトタイプ パターンのアプローチでは、すべてのオブジェクト インスタンスがそれに含まれるプロパティとメソッドを共有できるようにすることで、この問題を解決します。
簡単に言えば、ほとんどの場合、メソッドがプロトタイプに記述され、プロパティがコンストラクターに記述されることを除いて、関数は同じです。そのため、最初のメソッドがより一般的に使用されます