我尝试在浏览器控制台中执行这一小部分代码:
var row = query.getAsObject();
Object.keys(row).forEach(function(column) {
console.log(column); // Column Name
console.log(row[column]); // Column Value
});
每次我习惯称'c'变速,我都没有得到console.log(5)来执行。这意味着我的吸气者没有打电话。 我想这可能是因为我没有直接调用a.b而是使用c变量。 有人可以确认/拒绝我的想法吗?另外,每当我打电话给'c'时,我怎么能让它调用getter?
感谢。
答案 0 :(得分:2)
有人可以确认/拒绝我的想法
每次拨打console.log(5)
时,您都会a.b
运行。但是,当您使用c = a.b
时,会运行getter
函数,将结果复制到c
(undefined
)并从此处c
开始通过a.b
返回的独立值。因此,每次拨打c
时,都会评估c
并获取其值,而不是a.b
。简而言之,c
a.b
已经没有了c
。
另外,每当我打电话给'c'时,我怎么能让它调用getter?
实际上没有解决方案。您可以做的一件事是返回一个记录结果的函数,但现在您需要调用const a = {b: 1}
Object.defineProperty(a, 'b', { get: function() {
console.log(5);
return () => console.log(5);
}
});
const c = a.b;
c();
c();
才能使其正常工作。也许你可以在某个地方挑战你的逻辑,所以这不是一个好的解决方法。
{{1}}
答案 1 :(得分:0)
您只需get
ting b
一次,并将返回的值(在本例中为undefined
)分配给c
。
如果在此之后使用c
,则不再调用getter。