では usefulFunction
、参照渡しの C++ スタイルが への元の参照に影響を与えることを期待していますがconfig.updateThis
、
this.usefulFunction(this.config.updateThis);
「false」文字列への新しい参照を作成しています (に渡すため)。元の参照をfromusefulFunction
で更新することはできません。this.config
usefulFunction
これに対処する唯一の方法は、更新するオブジェクトの名前を渡すことです。繰り返しになりますが、JS には C++ の参照渡しはありません。実施例
App = {
config: {
updateThis: 'false'
},
init: function(){
this.usefulFunction(this.config, 'updateThis');
this.consoleIt();
},
usefulFunction: function(object, prop){
object[prop] = 'yeah';
},
consoleIt: function(){
console.log(this.config.updateThis);
}
}
問題は、文字列が不変であることではありません
ᚗ̸̢̛͝ は、問題は文字列が不変であることだと主張しています。しかし、問題はそれよりも深刻です。文字列が不変であるという事実は、現在の参照を変更できない (したがって、他のすべての参照を更新する) ことができないことを意味しますが、それらが変更可能であったとしても、別の参照を設定して既存の参照に影響を与えることはできませんでした
var a = {b:1};
function change(obj) {
// This is assigning {c:2} to obj but not to a
// obj and a both point to the same object, but
// the following statement would simple make obj point to a different object
// In other languages, you could define function(&obj) {}
// That would allow the following statement to do what you intended
obj = {c:2};
}
change(a);
console.log(a); // still {b:1}