object.prototype上的定义属性在创建嵌套对象时不会激发



我只是想弄清楚他的工作原理,但这种情况让我很困惑。

Object.defineProperty(Object.prototype, 'a', {set: function() {console.log("Set!");} });

使用该方法,我假设任何时候创建一个名为的对象时,该函数都应该激发。它在这里工作:

a = {};
Set!

但不是这样嵌套的:

test = {a:{}};

我是不是误解了什么?

对象文字{a: …}正在创建一个具有自己属性的新对象。它不为属性创建调用任何继承的setter,部分原因是为了防止JSON劫持。

但是,以下代码将具有所需的行为:

test = {};
test.a = {};

最新更新