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.
languageattribute is deprecated, use only thetypeattribute. It's also better to useconsole.loginstead of thealertand use the Chrome Dev. Tools (or FireBug) to read them. And finaly you need to have a doctype on line 1 of your code, a doctype is:<!doctype html>var name = {}syntax too.