1

私はオブジェクトリテラルを持っています:

var tasks = {};

私は基本的に次のように追加します:

function addTask(task) {
  tasks[task.id] = task
}

start各タスクで関数を呼び出せるように変更したいと思います。そう:

var tasks = {};
tasks.__proto__.start = function(key) {
  // do stuff with this[key]
}

function addTask(task) {
  tasks[task.id] = task
  tasks.start(task.id)
}

protoオブジェクトは避けるのが最善であり、実行が遅くなると聞いたことがあります。ただし、再割り当てするのではなく、追加します。

より良いと考えられる代替手段はありますか?

4

2 に答える 2

3

これは、パフォーマンスとブラウザーの互換性の両方の観点からお勧めできません。

mozilla のドキュメントから次の警告を参照してください。

警告: オブジェクトの [[Prototype]] を変更することは、最新の JavaScript エンジンがプロパティ アクセスを最適化する方法の性質上、すべてのブラウザーと JavaScript エンジンで非常に遅い操作です。継承の変更によるパフォーマンスへの影響は微妙で広範囲に及び、obj で費やされる時間だけに限定されません。proto = ... ステートメントですが、[[Prototype]] が変更された任意のオブジェクトにアクセスできる任意のコードに拡張できます。パフォーマンスを重視する場合は、オブジェクトの [[Prototype]] の設定を避ける必要があります。代わりに、Object.create() を使用して、目的の [[Prototype]] を持つ新しいオブジェクトを作成します。

--

警告: Object.prototype. protoは現在、ほとんどのブラウザーでサポートされています。その存在と正確な動作は、Web ブラウザーとの互換性を確保するためのレガシー機能として ECMAScript 2015 仕様でのみ標準化されています。サポートを強化するために、代わりに Object.getPrototypeOf() のみを使用することをお勧めします。

于 2017-08-07T19:49:14.253 に答える