2015-02-28 5 views
0

У меня есть конструктор в JavaScript, как это:Какие части классов JavaScript воссозданы в памяти при вызове `new`?

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 байтам? Чем больше, тем меньше?

ответ

0

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

Для справки см отличной MDN Javascript Inheritance and the prototype chain статьи, в которой они объясняют, как свойство доступно в JavaScript

+0

мог бы вы привести некоторые источники этой информации? – zzzzBov

+0

@elmalto Это потому, что конструктор является закрытием? –

+0

@zzzzBov Это легко рассуждать; изменение прототипа впоследствии влияет на оба экземпляра, таким образом, он живет в собственной части памяти, а другие экземпляры ссылаются на него. –

 Смежные вопросы

  • Нет связанных вопросов^_^