Oui, mais alors, on peut se retrouver avec un code comme ceci:
Donnant, dans FireBug:
Donc, callback a bien modifié les objets qui normalement ne sont contenus que dans "t", et callback est en dehors de la "classe" t. Ca ne viole pas l'encapsulation? Le contenu de t a été altéré par callback, qui est hors de t.
<html>
<head>
<script>function go()
{
// Classe
var k = function()
{
this.value = 0;
this.increment = function()
{
this.value++;
}
}
// Callback
function callback(val)
{
val.increment();
}
// Conteneur
var t = [new k(), new k(), new k()];
console.log(t);
t.forEach(callback);
console.log(t);
}
</script>
</head>
<body onload="go()">
</body>
</html>
Donnant, dans FireBug:
Citation :[Object { value=1, increment=function()}, Object { value=1, increment=function()}, Object { value=1, increment=function()}]
t.htm (ligne 23)
[Object { value=1, increment=function()}, Object { value=1, increment=function()}, Object { value=1, increment=function()}]
Donc, callback a bien modifié les objets qui normalement ne sont contenus que dans "t", et callback est en dehors de la "classe" t. Ca ne viole pas l'encapsulation? Le contenu de t a été altéré par callback, qui est hors de t.