当且仅当使用JavaScript时,如何在JavaScript中计算变量?

fen*_*ent 9 javascript variables

这就是我现在正在做的事情.

var foo = function() {
  var x = someComplicatedComputationThatMayTakeMoreTime();
  this.foo = function() { return x; };
  return x;
}
Run Code Online (Sandbox Code Playgroud)

它工作,但只有当foo被调用为这样的函数

foo();
Run Code Online (Sandbox Code Playgroud)

但是如果我想将它称为具有值的正常变量呢?我可以修改代码

var foo = function() {
  var x = someComplicatedComputationThatMayTakeMoreTime();
  this.foo = x;
  return x;
}
Run Code Online (Sandbox Code Playgroud)

这将允许我只将它作为一个函数调用一次,然后作为常规变量调用它.但它仍然不是我想要的.如果它意外地再次被调用为函数,它会变得复杂,并返回错误.

这在JavaScript中是否可行?

顺便说一句,这是针对Chrome/Firefox扩展,因此IE兼容性并不重要.

使用toString结束因为getter不允许我重新定义整个属性,所以函数必须与之关联.并且toString具有更清晰的语法.

Koo*_*Inc 7

使用toString怎么样?

var foo = function() {
  function someComplicatedComputationThatMayTakeMoreTime() {
        //your calculations
  }
  return {
      toString: function() { 
           return someComplicatedComputationThatMayTakeMoreTime(); 
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

有关JavaScript中对象到原始转换的更多信息

根据评论编辑.使用单身人士(我认为它被称为):

myObject.prop = (function(){ 
                  function someComplicatedComputationThatMayTakeMoreTime() {
                   //your calculations
                  }
                  return { 
                    toString: function() { 
                     return someComplicatedComputationThatMayTakeMoreTime(); 
                    } 
                  } 
                })()
Run Code Online (Sandbox Code Playgroud)