Je prévois de faire des "points d'extension" dans un framework im building et je trouve un moyen de fournir le "core" à une extension afin qu'elle puisse ajouter des fonctionnalités sans exposer l'objet de base peut être arbitrairement manipulé (je sais créer une interface est la meilleure idée) mais de seuil, alors que je testais (ainsi que l'apprentissage), je me suis demandé pourquoi cela se produit:Comportement de fermeture inattendu
(function() {
var core = {'bar': 'foo'}
function getCore() {return core;}
window.kit = {
core: core,
getCore: getCore
}
}());
//initial check
console.log(kit.core)
console.log(kit.getCore());
//change the bar
kit.core.bar = 'baz';
//we will both see 'baz'
console.log(kit.core)
console.log(kit.getCore());
//null the core
kit.core = null;
//this time...
console.log(kit.core) //core is null on this one
console.log(kit.getCore()); //why is the core still there on this one?
Notez également que 'kit.core' n'est pas une référence ou un pointeur. C'est une valeur, tout comme la variable locale 'core' est une valeur – Raynos
Raynos:' kit.core' pointe vers l'objet local 'core'. si vous modifiez l'objet, l'autre changera aussi. –
@KarolyHorvath Si vous changez le ** contenu ** de 'kit.core', alors la fonction" getCore() "verra le changement. Si, cependant, vous faites juste 'kit.core' référez-vous à quelque chose de nouveau, alors (comme l'OP a découvert) la relation est cassée. – Pointy