Javascript原型共享变量

时间:2014-07-07 12:28:51

标签: javascript prototype

原型结构中的变量是否可以在所有实例中具有相同的值?在我的情况下,我需要加载Google API,但我想确保脚本只加载一次。

SharedVariable.prototype.createCache = function ( key, requestFunction, callback ) {

    // <-- this.cache should be a variable shared across all instances

    if ( !this.cache[ key ] ) {
        this.cache[ key ] = $.Deferred( function( defer ) {
            requestFunction( defer );
        }).promise();
    }
    return this.cache[ key ].done( callback );
}

http://jsfiddle.net/BrQkP/

createCache有三个参数:

  1. key基本上是脚本的src
  2. requestFunction是一个每key只调用一次的函数。
  3. callback是一个多次调用的函数
  4. 此功能仅在this.cache为&#34;全球&#34;变量,在所有实例中应具有相同的值。目前,每个实例的值都不同,这就是代码无法正常工作的原因。原型可以这样吗?

1 个答案:

答案 0 :(得分:2)

制作原型的cache属性部分:

SharedVariable.prototype.cache = {};

现在SharedVariable的所有实例都引用相同的缓存对象。

根据您的JSFiddle编辑

http://jsfiddle.net/BrQkP/1/

您在JavaScript中将cache创建为数组,但您似乎正在设置字符串键值。你在JavaScript中滥用数组,因为它们应该是从零开始的整数索引键。相反,如上所述,使用花括号创建一个空对象。

更新了小提琴:http://jsfiddle.net/BrQkP/2/