这是我现在正在做的.
var foo = function() { var x = someComplicatedComputationThatMayTakeMoreTime(); this.foo = function() { return x; }; return x; }
它工作,但只有当foo被称为像这样的功能
foo();
var foo = function() { var x = someComplicatedComputationThatMayTakeMoreTime(); this.foo = x; return x; }
这将允许我只将其称为一次函数,然后作为常规变量.但它仍然不是我想要的.加上如果它意外地被作为一个函数被调用,返回错误就会变得复杂.
这甚至可能在JavaScript?
BTW,这是一个Chrome / Firefox扩展,所以IE兼容性没有关系.
结束使用toString,因为getter不允许我重新定义整个属性,一个函数必须与它相关联.而ToString语法更清晰.
解决方法
如何使用toString?
var foo = function() { function someComplicatedComputationThatMayTakeMoreTime() { //your calculations } return { toString: function() { return someComplicatedComputationThatMayTakeMoreTime(); } } }
更多约Object-to-Primitive Conversions in JavaScript
编辑基于评论.使用单身(我认为是这样):
myObject.prop = (function(){ function someComplicatedComputationThatMayTakeMoreTime() { //your calculations } return { toString: function() { return someComplicatedComputationThatMayTakeMoreTime(); } } })()