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.