Какие части классов JavaScript воссоздаются в памяти, когда я называю `new`?

У меня есть конструктор в 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();

Какие свойства моего класса были скопированы в памяти в последней версии движка JavaScript v8? Я имею в виду, есть ли сейчас две копии privateProperty, publicProperty, privateMethodи так далее в памяти?

Если объем памяти b было бы 100 байт, было бы след памяти b а также c вместе быть 200 байтов? Больше, меньше?

1 ответ

Все в вашем конструкторе классов будет существовать как копии в памяти, в то время как все в Foo.prototype будет совместно использоваться экземплярами. Следовательно, объем памяти должен быть чуть меньше 200 байт.

Для справки см. Превосходное наследование Javascript MDN и статью о цепочке прототипов, где объясняется, как осуществляется доступ к свойству в javascript.

Другие вопросы по тегам