Javascript对象getter

时间:2017-11-21 16:19:20

标签: javascript object getter

我尝试在浏览器控制台中执行这一小部分代码:

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?

感谢。

2 个答案:

答案 0 :(得分:2)

  

有人可以确认/拒绝我的想法

每次拨打console.log(5)时,您都会a.b运行。但是,当您使用c = a.b时,会运行getter函数,将结果复制到cundefined)并从此处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。