Using the variable “name” doesn't work with a JS object

后端 未结 4 1990
不知归路
不知归路 2020-11-21 06:11

The behaviour can be seen in this little snippet (execute it as a global script):

var name = {};
name.FirstName = \'Tom\';
alert(name.FirstName);
         


        
4条回答
  •  天涯浪人
    2020-11-21 06:53

    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.

提交回复
热议问题