这就是我现在正在做的事情。
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 中可能吗?
顺便说一句,这是针对 Chrome/Firefox 扩展的,因此 IE 兼容性并不重要。
最终使用 toString 因为 getter 不允许我重新定义整个属性,必须有一个函数与其关联。 toString 具有更清晰的语法。
使用 toString 怎么样?
var foo = function() {
function someComplicatedComputationThatMayTakeMoreTime() {
//your calculations
}
return {
toString: function() {
return someComplicatedComputationThatMayTakeMoreTime();
}
}
}
更多关于JavaScript 中的对象到基元转换 http://www.adequatelygood.com/2010/3/Object-to-Primitive-Conversions-in-JavaScript
EDIT根据评论。使用单例(我认为它被称为):
myObject.prop = (function(){
function someComplicatedComputationThatMayTakeMoreTime() {
//your calculations
}
return {
toString: function() {
return someComplicatedComputationThatMayTakeMoreTime();
}
}
})()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)