不能在对象上设置自定义属性

Can't set customized property on objects

本文关键字:设置 自定义属性 对象 不能      更新时间:2023-09-26

我试图定义一个名为userdata的自定义属性,但对于位置等对象。哈希,它不工作,我得到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;

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

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

然而,location.hash.userdata = true;肯定不会工作,因为当您使用点符号将location.hash原语字符串作为对象时,它会将原语值包装在String原语包装器中,然后丢弃该包装器对象,因此它与new String(location.hash).userdata = true;

相同

因为你不能做location.hash = new String(location.hash),你将不得不把你的属性存储在另一个对象上,因为location.hash将永远是不可变的。