5

在这个JS MDN页面上它说:

JavaScript 1.8.1 注意

从 JavaScript 1.8.1 开始,在对象和数组初始值设定项中设置属性时不再调用 setter。

我只是想不通这是想告诉我什么。

4

2 回答 2

7

此代码片段:

var o = {};
o.seven = 7;

这个代码片段:

var o = { seven: 7 };

通常是等价的;但如果它们前面有这个代码片段:

Object.prototype.__defineSetter__('seven', function(x) { alert(x); });

那么只有前者会发出警报7(因为 setter 是由 调用的o.seven = 7,而不是由调用的o = { seven: 7 }),并且只有后者会实际设置o.seven7.

于 2012-10-23T22:50:23.520 回答
4

我认为这是指 JSON 劫持的问题。看一下

要从这个已删除的问题中重新发布我的答案:

根据规范,数组(EcmaScript 5.1 §11.1.4)和对象文字(EcmaScript 5.1 §11.1.5)都不应该被劫持:

  • 他们称“具有该名称的标准内置构造函数”,而不是您可能在window.Arraywindow.Object
  • 他们使用 [[defineOwnProperty]],它绝对不会处理Object.prototype.

如今,这在 ES 5.1 兼容的浏览器中应该不再是问题。

于 2012-10-23T23:15:52.877 回答