Javascript 在对象初始值设定项中设置属性时不再调用setter:这意味着什么?
这一页上写着: JavaScript 1.8.1注释 从JavaScript1.8.1开始,setter不是 在对象和数组中设置属性时不再调用 初始化者 我就是不明白这是想告诉我什么。这段代码片段:Javascript 在对象初始值设定项中设置属性时不再调用setter:这意味着什么?,javascript,Javascript,这一页上写着: JavaScript 1.8.1注释 从JavaScript1.8.1开始,setter不是 在对象和数组中设置属性时不再调用 初始化者 我就是不明白这是想告诉我什么。这段代码片段: var o = {}; o.seven = 7; var o = { seven: 7 }; Object.prototype.__defineSetter__('seven', function(x) { alert(x); }); 下面是代码片段: var o = {}; o.seven
var o = {};
o.seven = 7;
var o = { seven: 7 };
Object.prototype.__defineSetter__('seven', function(x) { alert(x); });
下面是代码片段:
var o = {};
o.seven = 7;
var o = { seven: 7 };
Object.prototype.__defineSetter__('seven', function(x) { alert(x); });
通常是等价的;但如果前面有以下代码段:
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劫持问题。看看
- ,
- 他们称之为“具有该名称的标准内置构造函数”,而不是您在
或window.Array
window.Object
- 它们使用[[defineOwnProperty]],这绝对不会考虑
上的任何setter对象.prototype
如今,在兼容ES5.1的浏览器中,这应该不再是一个问题。
本文需要进行技术审查。
-参考ES5.1规范了解现代getter/setter语法(除非出于某种原因,您需要修补旧firefox的getter/setter。在这种情况下,我为您感到抱歉)c69-wah?我在哪里可以找到它?在页面的顶部。有一个红色警告。c69-o ES规范也没有帮助,我太累了