0

我正在尝试定义一个名为 的自定义属性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;

它将被正确设置,我不明白为什么前一个例子不起作用

4

1 回答 1

1

由于默认值为userdatais ,因此第一个警报给出 false 是正常的false

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

由于您不能这样做location.hash = new String(location.hash),因此您将不得不将您的属性存储在另一个对象上,因为location.hash它将始终是不可变的。

于 2013-04-09T02:26:34.487 回答