2014-07-07 3 views
0

프로토 타입 구조 내의 변수가 모든 인스턴스에서 동일한 값을 가질 수있는 방법이 있습니까? 제 경우에는 Google API를로드해야하지만 스크립트가 한 번만로드되도록하고 싶습니다.Javascript 프로토 타입 공유 변수

  1. key는 기본적으로 스크립트
  2. requestFunction의 SRC 만 key 당 한 번만 호출되는 함수입니다 :
    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

    세 가지 매개 변수가 있습니다.
  3. callback
  4. 여러 번

this.cache 모든 경우에 같은 값을 가지고해야 "글로벌"변수 인 경우이 기능은 작동을 호출되는 함수입니다. 현재 각 인스턴스마다 값이 다르므로 코드가 제대로 작동하지 않습니다. 프로토 타입으로 가능한 것입니까?

+0

"SharedVariables"의 "인스턴스"를 만들고 있습니까? 또는 모든 "SharedVariables"가 "속성을 공유"하시겠습니까? 클래스 이름을 모호하게 만드십시오. – Bergi

+0

@Bergi 필자는 두 개의 인스턴스 ('new SharedVariables')를 만들고 있습니다. 각 인스턴스에는 "cache"라는 변수가 있습니다. "캐시"가 모든 인스턴스에서 동일한 값을 갖기를 원합니다. – Daniel

답변

2

는 프로토 타입의 cache 속성 부분을 확인하십시오

SharedVariable.prototype.cache = {}; 

이제 SharedVariable 참조 같은 캐시 개체의 모든 인스턴스.

편집 당신은 자바 스크립트에서 배열로 cache를 작성, 아직 문자열 키 값을 설정하는 것 같다

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

당신의 JSFiddle
에 따라. 0에서 시작하는 정수형 인덱스 키로 간주되기 때문에 JavaScript로 배열을 남용하고 있습니다. 대신 위에 언급 한 것처럼 중괄호를 사용하여 빈 객체를 만듭니다.

업데이트 됨 : http://jsfiddle.net/BrQkP/2/

+0

감사! 내 바이올린 업데이트 : http://jsfiddle.net/BrQkP/1/ – Daniel