在这个JS MDN页面上它说:
JavaScript 1.8.1 注意
从 JavaScript 1.8.1 开始,在对象和数组初始值设定项中设置属性时不再调用 setter。
我只是想不通这是想告诉我什么。
在这个JS MDN页面上它说:
JavaScript 1.8.1 注意
从 JavaScript 1.8.1 开始,在对象和数组初始值设定项中设置属性时不再调用 setter。
我只是想不通这是想告诉我什么。
此代码片段:
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.seven
为7
.
我认为这是指 JSON 劫持的问题。看一下
要从这个已删除的问题中重新发布我的答案:
根据规范,数组(EcmaScript 5.1 §11.1.4)和对象文字(EcmaScript 5.1 §11.1.5)都不应该被劫持:
- 他们称“具有该名称的标准内置构造函数”,而不是您可能在
window.Array
或window.Object
- 他们使用 [[defineOwnProperty]],它绝对不会处理
Object.prototype
.
如今,这在 ES 5.1 兼容的浏览器中应该不再是问题。