The behaviour can be seen in this little snippet (execute it as a global script):
var name = {};
name.FirstName = \'Tom\';
alert(name.FirstName);
window.name
is used to set the name of the window, and since the window name can only be a string, anything you set to window.name
is converted to a string. And strings, as primitive values, cannot have properties. The solution is to use a different variable name or a different scope.
Alternatively, you can use window.name
as you like if you have this code first. I don't recommend this at all, but, just as a proof of concept:
(function () {
var _name;
window.__defineGetter__('name', function () {
return _name;
});
window.__defineSetter__('name', function (v) {
_name = v;
});
})();
Additionally, you should use {}
in place of new Object
. Besides being more concise, it is also more efficient and more explicit.