objects passed by reference
by John Allan
HTML
<div id="display"></div>
CSS
body {
font-family: 'Times New Roman'
}
JavaScript
function log () {
var html, args;
args = Array.prototype.slice.call(arguments).join(' ');
html = $(['<div>', args, '</div>'].join(''));
$('#display').append(html);
}
viewModel = (function () {
var module;
module = {};
var view = {
'str': 'foo',
'arr': ['bar', 'baz'],
'obj': {
'str': 'foo'
}
};
module.getView = function () {
return view;
};
module.getProperty = function (name) {
return view[name];
};
return module;
}());
log('a string object property is passed by value');
var s;
log('get property str as s | ', viewModel.getProperty('str'));
log('set s to \'oof\'');
s = viewModel.getProperty('str');
s = 'oof';
log('property str is still | ', viewModel.getProperty('str'));
log('<br>');
log('an object is passed by reference');
var view;
log('get whole view object');
log('set view.str = oof');
view = viewModel.getView('str');
view.str = 'oof';
log('get property str is now | ', viewModel.getProperty('str'));
log('<br>');
var obj;
log('a object property which is an object is passed by reference');
log(viewModel.getProperty('obj').str);
obj = viewModel.getProperty('obj');
log("obj.str = 'oof';");
obj.str = 'oof';
log('object now contains ', viewModel.getProperty('obj').str);
log('<br>');
var childObj;
log('you cannot replace an entire child object because the object would be different');
log('obj.str is ', viewModel.getProperty('obj').str);
childObj = viewModel.getProperty('obj');
log("childObj = {'str': 'baz'};");
childObj = {'str': 'baz'};
log('object remains as ', viewModel.getProperty('obj').str);
log('<br>');
log(viewModel.getProperty('arr'));