Какие части классов 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.