ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript オブジェクト指向メソッドと相違点_js オブジェクト指向
最初のキーワード:
function Class1()
{
this.onclick = function(e)
{
for (var i=0; i プロパティを追加およびメソッドがあり、ほとんどの OOP 言語と同様に、実行時に追加することもできます。
2 番目: プロトタイプ キーワード
function clickFunc(e)
{
for (var i=0; i {
var を使用します。 a = 新しい Date();
}
}
関数 Class2()
{
}
Class2.prototype.onclick = clickFunc;
この使用法は最初の使用法ほど柔軟ではありません。ただし、新しいオブジェクトが登場する前であれば、いつでもオブジェクトのプロパティとメソッドを追加することもできます。
しかし、相対的に言えば、最初の方法の方が集中していてコードが読みやすいため、私は最初の方法を好みます。しかし、走ってみると、走行効率が全く違います。以下のテスト コードを見てみましょう。
var total = new Array();
function Test1()
{
var a = new Date(); 🎜 > for (var i=0; i {
var c = new Class1()
//total.push(c); b = 新しい日付();
アラート(b.getTime()-a.getTime());
関数 Test2()
{
var a = 新しいDate (); for (var i=0; i {
var c = new Class2(); //total.push(c);最初のステップは、実行時間をテストすることです。 find Test1() は 142 ミリ秒かかりますが、Test2() は 50 ミリ秒しかかかりません。時間効率の点では、プロトタイプ メソッドの方が効率的です。
2 番目のステップは、total.push(c); 行からコメントを削除することです。配列にコメントを追加する必要があるのは、作成時に多数のオブジェクトが存在することを防ぐためです。それらの場合、参照されていないオブジェクトは GC されます。最初の方法は 20 ~ 30 M のメモリを必要としますが、2 番目の方法は 100 K 以上しか必要としません。
原因推論:
これら 2 つのコードを処理するとき、最初のコードである JS パーサーはオブジェクトごとに個別のメソッドを作成します。これにより、メモリのオーバーヘッドが増加し、メソッドが作成されるため、実行時間が増加します。次に、JS パーサーは、ほとんどの OOP コンパイラーと同様に、オブジェクトのデータ セグメントとメソッド セグメントを別々に保存します。オブジェクトのプライベート データについては、オブジェクトごとに 1 つのコピーがあり、これらのメソッドはパブリック メソッド セクションに配置されるため、実行時間とメモリのオーバーヘッドを削減します。