現在、多くの人がJSSを学習した後にJSオブジェクトを使用してコードを実装していますが、JavaScriptではJSオブジェクトは動的な言語です。始めたばかりの多くの友人は、JavaScriptのオブジェクト指向の執筆方法は何ですか?違いは何ですか? JavaScriptオブジェクト指向のライティング方法と違いを説明しましょう。
JSでは、一般にOOPを実装する2つの方法があります。
最初:このキーワードを使用します
関数class1()
{
this.onclick = function(e)
{
for(var i = 0; i <1000; i ++)
{
var a = new date();
}
}
}
これを使用します。方法は、オブジェクトにプロパティとメソッドを柔軟に追加することができ、ほとんどのOOP言語に似ており、操作中に追加することもできます。
2番目のタイプ:プロトタイプキーワードを使用します
関数clickfunc(e)
{
for(var i = 0; i <1000; i ++)
{
var a = new date();
}
}
function class2()
{
}
class2.prototype.onclick = clickfunc;
使用に関しては、柔軟性があると思われる最初のものはありません。ただし、オブジェクトが新しい前に、オブジェクトのプロパティとメソッドをいつでも追加することもできます。
しかし、それらは平等ではありません。比較的言えば、最初の方法は比較的集中しており、コードを読みやすいので、最初のものを好みます。ただし、実行すると、動作効率は大きく異なります。以下のテストコードを見てみましょう。
var total = new Array();
関数test1()
{
var a = new date();
for(var i = 0; i <10000; i ++)
{
var c = new Class1();
//total.push(c);
}
var b = new Date();
alert(b.gettime()-a.gettime());
}
関数test2()
{
var a = new date();
for(var i = 0; i <10000; i ++)
{
var c = new class2();
//total.push(c);
}
var b = new Date();
alert(b.gettime()-a.gettime());
}
最初のステップは、実行時間をテストすることです。Test1()には142msが必要であり、Test2()には50msしかかかりません。時間効率の点では、プロトタイプ法はこれよりも効率的です。
JavaScriptオブジェクトの2番目のステップは、メモリ使用量をテストし、Total.push(c)のコメントを削除することです。合計.push(c);それらがアレイに追加され、作成されたオブジェクトが作成されたときに多くのオブジェクトがあるときに、参照されていないオブジェクトがGCになるのを防ぎます。その結果、ギャップはそれほど大きくないことがわかりました。最初の方法では20または30 mのメモリを取り上げましたが、2番目の方法では100 K以上しか必要でした。
JavaScriptはオブジェクトを作成します
推論を引き起こす:
これらの2つのコードを処理するとき、最初のタイプはJSパーサーであり、各オブジェクトの個別のメソッドを作成し、メモリオーバーヘッドを増加させ、メソッドを作成するときに実行時間を増加させます。 2番目のタイプは、JSパーサーがほとんどのOOPコンパイラと同様に、オブジェクトのデータセグメントとメソッドセグメントを個別に保存することです。オブジェクトのプライベートデータの場合、オブジェクトごとに1つのコピーがあり、これらのメソッドはパブリックメソッドセグメントに配置されるため、実行時間とメモリオーバーヘッドを削減できます。
上記は、Fo Xinの編集者であり、オブジェクト指向のライティング方法とJavaScriptの違いの違いを説明しています。もっと深く知りたい場合は、Xin Technologyチャンネルにアクセスして理解できます。