0

次のテンプレートを使用して、JavaScript でオブジェクトを作成しています。

function FileSpec(directory, filename){
  var object = {};
  object.full_path = function(){
    return directory + '/' + filename;
  }
  return object;
}

var filespec = FileSpec('tmp', 'index.html');

上記の実装を使用する場合と、prototype および new を使用する場合の特定の欠点はありますか?

function FileSpec(directory, filename){
  this.directory = directory;
  this.filename = filename;
}

FileSpec.prototype.full_path = function(){
  return this.directory + '/' + this.filename
}

var filespec = new FileSpec('tmp', 'index.html');
4

1 に答える 1

2
  1. instanceof1 では演算子またはObject.isPrototypeOf()メソッドを効果的に使用することはできませんが、 2 では使用できます。

    filespace instanceof FileSpec; // false with 1, true with 2
    Filespec.isPrototypeOf(filespace); //false with 1, true with 2
    
  2. 継承を使用する場合prototype、プロトタイプ メンバー (メソッドなど) はプロトタイプで 1 回だけ定義されます。#1 では、各インスタンスでメンバーの新しいグループを定義していますが、これはより多くのメモリを消費します。

    var ar = [];
    
    for (var i=0;i<10000000;i++) {
        ar.push(FileSpec('tmp', 'index.html'));
    }
    
    // check memory usage, cry.
    

    に比べ:

    var ar = [];
    
    for (var i=0;i<10000000;i++) {
        ar.push(new FileSpec('tmp', 'index.html'));
    }
    
    // check memory usage.
    
于 2013-01-09T14:29:42.147 に答える