是否将新属性分配给内置类型实际上是非法的?

时间:2014-10-16 02:27:39

标签: javascript

我有以下代码,以前在Chrome中运行良好,但突然停止使用最新版本(38.0.2125.104)。



(function() {
    "use strict";
    
    var stringPrototype = String.prototype;
    stringPrototype.foo = function() { this.$foo = 1234; };
    var s = "abcd";
    s.foo();
})();




现在我收到错误(如果您运行代码段,您将在控制台中看到错误):

  

未捕获的TypeError:无法分配给只读属性' $ foo' abcd

我很想知道这是Chrome中的新错误,还是我一直在做的事实上是非法的。如果它是非法的,是否有任何参考规范可以描述为什么会这样?

以前版本的Chrome从未导致错误。

1 个答案:

答案 0 :(得分:1)

上面的评论帮助我解决了我的问题。总结一下,我正在做的任务:

this.$foo = 1234

从未做任何事情。在较新版本的Chrome中,这种虚假分配实际上会导致错误。这似乎是一种改进,因为它会更快地导致失败并且应该更早地发现潜在的错误。

因此,尽管我认为较新版本的Chrome在以前正在运行的代码中导致错误,但由于我的代码从未执行任何操作,因此我可以安全地删除该分配,因为行为必须完全相同。 / p>

(将此作为社区维基回答,因为Pointy和Derek完成了所有繁重的工作。)