将新属性分配给内置类型实际上是非法的
Is assigning new properties to built-in types actually illegal?
我有以下代码,以前在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完成的。)
相关文章:
- jQuery中是否内置了任何字符串格式化函数
- 为什么可以't我访问Chrome内置功能$
- 正在寻找一种跨移动浏览器兼容的方式,通过内置麦克风进行录制
- 使用angularjs内置过滤器过滤代码中的特定属性
- 带有内置图像对象的Canvas组件构造函数;t显示's图像
- 挂钩到Rails内置远程:true'ajax:成功'事件
- 是否有任何内置方法可以更改JavaScript对象'的属性设置为某个值
- html元素是否具有内置的属性
- 为什么没有用于cookie的内置JS函数
- Java Selenium 2.0-在WebElement.click()之前使用内置滚动时处理z索引(navi)
- 在javascript中定义内置类型的方法
- 将新属性分配给内置类型实际上是非法的
- 未捕获的错误:不变冲突:元素类型无效:需要字符串(对于内置组件)或类/函数,但得到:对象
- react router问题未捕获错误:不变冲突:元素类型无效:应为字符串(用于内置组件)
- 扩展JavaScript的内置类型 - 它是邪恶的吗?
- 重新分配内置类型的原型
- Node.js/JavaScript内置类型的存根
- 内置JavaScript类型名称的大小写
- 元素类型无效:期望是字符串(对于内置组件)或类/函数(对于复合组件),但得到:未定义
- Screeps 内置函数不返回预期的类型