0

次のような JavaScript のコンストラクターがあります。

function Foo() {

  var privateProperty = "goodbye";
  this.publicProperty = "hello";

  function privateMethod() {

    return "Shhhhh";
  }
  this.publicMethod = function publicMethod() {

    return "extroverted";
  };
}

Foo.prototype.youCanSeeMe = "I'm out here";
Foo.prototype.typical = function typical() {

  return "look at me out here";
};

var b = new Foo();
var c = new Foo();

v8 JavaScript エンジンの最新バージョンでは、クラスのどのプロパティがメモリにコピーされますか? つまり、メモリ内に 、 、 などprivatePropertypublicPropertyコピーが 2 つあるということですか?privateMethod

のメモリ フットプリントbが 100 バイトの場合、 と のメモリ フットプリントはb合わせcて 200 バイトになりますか? 大きく、小さく?

4

1 に答える 1

0

クラス コンストラクター内のすべてがメモリ内のコピーとして存在し、Foo.prototype 内のすべてがインスタンス間で共有されます。したがって、メモリ フットプリントは 200 バイトよりわずかに少なくなります。

参考までに、優れた MDN Javascript Inheritance とプロトタイプ チェーンの記事を参照してください。ここでは、javascript でプロパティにアクセスする方法について説明しています。

于 2015-02-28T01:46:42.120 に答える