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

Is assigning new properties to built-in types actually illegal?

本文关键字:置类型 内置 实际上 非法 分配 新属性 属性      更新时间:2023-09-26

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

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

现在我得到了错误(如果你运行这个片段,你会在控制台中看到错误):

未捕获的类型错误:无法分配给abcd 的只读属性"$foo"

我很想知道这是否是Chrome中的一个新错误,或者我所做的事情是否真的是非法的。如果这是非法的,是否有任何参考规范可以描述为什么会这样?

这在以前版本的Chrome中从未造成错误。

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

this.$foo = 1234

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

因此,尽管我认为新版本的Chrome会导致以前工作的代码出现错误,但由于我的代码从未做过任何事情,我可以安全地删除分配,因为行为必须完全相同。

(作为一个社区维基来回答这个问题,因为所有繁重的工作都是由Pointy和Derek完成的。)