gpt4 book ai didi

Javascript:对 Object.defineProperties 函数感到困惑

转载 作者:行者123 更新时间:2023-12-03 12:09:02 26 4
gpt4 key购买 nike

这就是我使用Object.defineProperties的方式生成一个对象:

var obj = {
t3: 3,
t1: Object.defineProperties({}, {
getT3: {
value: function () {
console.log(this.t3);
}
},
t2: {
value: this.t3
},
t3: {
value: 4
}
})
}

现在我想打印 obj.t1.t2值:console.log(obj.t1.t2) ,但返回结果是undefined

但我可以使用 obj.t1.getT3()方法获取obj.t1.t3的值;

为什么 t3分配给t2不适用于Object.defineProperties

演示在这里:http://jsfiddle.net/HrLLQ/

最佳答案

这里的问题是关于 this元素。

当您调用.defineProperties()时,this元素不是指您所在的对象,也不是它的父对象或其他对象,而是指 this函数的元素 defineProperties ,实际上是window

这是一个例子:

var foo = { bar: 10, b: { c: this, d: this.bar } }
console.log(foo.b.d); // logs undefinded, because the window object has no attribute .bar
console.log(foo.b.c); // logs the window object

function x() { y = this }
x();
console.log(y); // also logs the window object

要使其正常工作,您必须定义 .t2属性作为函数,例如:

function() { return this.t3 }

因此,一旦对象被创建,它的 this元素将是 obj ,和obj.t1.t2()将返回obj.t3 (实际上是 3)。

关于Javascript:对 Object.defineProperties 函数感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25050137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com