无法在对象上设置自定义属性

时间:2013-04-09 02:22:28

标签: javascript firefox

我正在尝试定义一个名为userdata的自定义属性,但对于像location.hash这样的对象,它不起作用,我通过两个警报调用得到了false, false

        Object.defineProperty(Object.prototype, "userdata", {
            value: false,
            writable: true,
            enumerable: true,
            configurable: true
        });

        alert (location.hash.userdata);
        location.hash.userdata = true;
        alert (location.hash.userdata);

它是不可变的吗?

如果我定义自己的对象,即

var a = {};
a.userdata = true;

它将被正确设置,我无法理解为什么前一个例子不起作用

1 个答案:

答案 0 :(得分:1)

由于userdata的默认值为false,因此第一个警报显示为false是正常的。

但是,location.hash.userdata = true;肯定不会起作用,因为当您使用点表示法将location.hash原始字符串视为对象时,它会将原始值包装在String原始包装器中,然后将该包装器对象丢弃,因此它与执行new String(location.hash).userdata = true;

相同

由于您无法执行location.hash = new String(location.hash),因此您必须将属性存储在另一个对象上,因为location.hash始终是不可变的。