2013-05-31 35 views
0

而不是只是说:如何存储变量:特权方法,静态属性

var thing = timeConsumingMethod(); 

我有我的变量隐藏在一个方法,像这样:

function _thing() { 
    var thing = timeConsumingMethod()); 
    return thing; 
    } 

它被调用的次数。我担心我做得非常低效。我假设它每次调用timeConsumingMethod(这是不需要的,它总是相同的)我称之为“_thing()”来获得我的变量。

如何以简单有效的方式管理这些类型的变量?是这样的一个解决方案?:

function _thing() { 
    return _thing.thing 
    } 
    _thing.thing = timeConsumingMethod(); 

基本上,我希望有一个功能和保护(ideally0访问使用_thing()或类似的东西我的变量,但我只想timeConsumingMethod运行一次。

编辑:试过,不工作之一:

function _thingy() { 
var thing = timeConsumingMethod(); 
} 
_thingy.test = function() { 
return(_thingy.thing) 
} 
+0

我建议的解决方案不实际工作。 –

+0

看看:http://www.seejohncode.com/2012/03/31/lazy-properties-in-javascript/ –

+0

@ArturUdod是的。我试图暗示(没有懒散部分)和财产被设置为某种东西。但我无法成为timeConsumingMethod的结果。你会如何填补道具的括号? –

回答

1

为什么不干脆:

function SomethingTimeConsuming() { ... } 

function LazyThing(sourceFunction) { 

    this.sourceFunction = sourceFunction; 
    this.value = null; 

    this.Value = function() { 
     if (this.value == null) this.value = sourceFunction(); 
     return this.value; 
    } 
} 

的jsfiddle:http://jsfiddle.net/YSAjJ/

输出:

[14:20:20.079] Calling time-consuming function *(1 time) 
+0

请在答案中至少提供链接的要点,或者发表评论。只有链接的答案很容易过时并变得毫无用处。 – deceze

+0

不错!非常感谢。 –

+0

@NathanCooper,你如何预测如果它被封装并只能通过调用getter-function来改变它的值? –