2015-02-28 5 views
0

J'ai un constructeur en JavaScript comme ceci:Quelles parties des classes JavaScript sont recréées en mémoire lorsque j'appelle `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(); 

Dans la dernière version du moteur JavaScript v8, les propriétés de ma classe sont copiées dans la mémoire? Je veux dire, y a-t-il maintenant deux copies de privateProperty, publicProperty, privateMethod, et ainsi de suite en mémoire? Si l'empreinte mémoire de b était de 100 octets, l'empreinte mémoire de b et c ensemble serait-elle de 200 octets? Plus grand plus petit?

Répondre

0

Tout dans votre constructeur de classe existera en tant que copies en mémoire alors que tout dans Foo.prototype sera partagé entre les instances. D'où l'empreinte mémoire devrait être légèrement inférieure à 200 octets

Pour référence, voir l'excellent article Javascript Inheritance and the prototype chain où ils MDN expliquent comment une propriété est accessible en javascript

+0

pourrait vous s'il vous plaît citer quelques sources pour cette information? – zzzzBov

+0

@elmalto C'est parce que le constructeur est une fermeture? –

+0

@zzzzBov Il est facile de raisonner ceci; changer le prototype affecte ensuite les deux instances, donc il vit dans sa propre partie de la mémoire et les autres instances la référencent. –