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具有更清晰的语法.
使用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)