问题描述
有没有更好的方法来写这个?理想情况下,我想以某种方式在对象文字中写入 pre_calculated_h
。
const obj = {
long_calc_f(x) {return 5*x},//Some time consuming calculation
g(x) {return x + 2},}
obj.pre_calculated_h = function(n) {
const pre_calculated_values = []
for (var i = 0; i < n; i++) pre_calculated_values.push(this.g(this.long_calc_f(i)))
return function(x) {return pre_calculated_values[x]}
}.call(obj,20)
解决方法
您可以将 getter 和引用对象定义为 this
,而无需显式传递它。不确定它是否更好:) 但缺点是您需要两次引用属性名称。
const obj = {
long_calc_f(x) {
return 5 * x
},//Some time consuming calculation
g(x) {
return x + 2
},get pre_calculated_h() {
console.log(`Precalculating`)
const pre_calculated_values = []
for (var i = 0; i < 20; i++) pre_calculated_values.push(this.g(this.long_calc_f(i)))
const value = function(x) {
return pre_calculated_values[x]
};
Object.defineProperty(this,'pre_calculated_h',{
enumerable: true,writable: false,value
});
return value
}
}
console.log(obj.pre_calculated_h(1),obj.pre_calculated_h(3),obj.pre_calculated_h(15))