如何在每次引用对象时强制对象中的函数进行求值?

Rya*_*ggs 4 javascript object

如果我创建一个对象,例如:

var obj = {
   val1: 1,
   val2: Math.random()
   };
Run Code Online (Sandbox Code Playgroud)

实例化对象时,立即计算Math.random()并将结果分配给obj.val2.

每个对obj.val2的未来引用都将返回此初始随机数.

有没有办法在每次引用对象时强制重新评估此函数?所以每次对obj.val2的引用都会重新运行Math.random(),产生一个新生成的随机数?

Cri*_*sty 7

您可以定义一个getter,这样每次访问该属性时,您都可以运行一个每次都返回一个新值的函数.

var obj = {
   val1: 1,
   get val2() {
      return Math.random();
   }
};
   
console.log(obj.val2)
console.log(obj.val2)
Run Code Online (Sandbox Code Playgroud)

  • 文字中的`get`函数绝对是这个简单案例的正确工具.对于更复杂的情况,我也可能会指出[`Object.defineProperty`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). (2认同)