gpt4 book ai didi

javascript - 对象值仅在需要/调用时计算

转载 作者:行者123 更新时间:2023-11-30 08:25:30 24 4
gpt4 key购买 nike

例如,我有一个对象,其中的键值尚待知道/计算,但当我第一次调用该键时,它会计算值并用计算值替换计算/函数。关键是该值仅在需要时计算出来,然后可以再次使用而无需再次计算...

这就是我目前所拥有的...

function newobj() {
this.test=function(){
this.test=[1,2,3,4]//complex function in real world use
return this.test
}
}

a = new newobj()

a.test() //[1,2,3,4]
a.test() //not a function!
a.test //[1,2,3,4]

如您所见,第一次调用时需要括号而不是第二次调用,因此这需要知道它是否已被调用 - 不理想

版本 2

function newobj() {
this.test=function(){
var a=[1,2,3,4]
this.test=function(){return a}
return a
}
}

a = new newobj()

a.test() //[1,2,3,4]
a.test() //[1,2,3,4]

这在某种程度上似乎不是解决此问题的正确方法..但也许是?

如果这是一个愚蠢的问题,我们深表歉意,在此先感谢您的帮助

最佳答案

您可以使用 getter 的能力来覆盖自身以创建一个“惰性”属性,其值仅在第一次访问时计算:

有一个 good example在 MDN。

get test() {
delete this.test;
return this.test = someExpensiveFunctionCall();
}

对该属性的后续访问甚至不使用 getter - 它们直接从对象中检索值。

在你的情况下,因为你没有使用通常的 getter 语法,你必须这样修改你的函数:

function newobj() {
Object.defineProperty(this, 'test', {
get: function() {
delete this.test;
return this.test = someExpensiveFunctionCall();
},
configurable: true
});
}

关于javascript - 对象值仅在需要/调用时计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46277581/

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