자바 스크립트 : 객체에서 동적으로 함수를 반환하는 방법

존 리틀

표준 개체 패턴을 사용하여 javascript로 SDK를 만들려고합니다. 예를 들어 데모가 간단한 RNG를 사용하는 경우 실제 게임 인 경우 HW RNG (다른 RNG 구현)를 사용하는 경우와 같이 결과 개체 중 하나를 동적으로 구성하지 않는 한 완벽하게 작동합니다. 아래는 작동하지 않습니다.

sdk.js

var Sdk = (function () {
    var rng;
    var localRng = (function() {
        var getInt = function(min, max) { // min and max included 
            return Math.floor(Math.random() * (max - min + 1) + min);
        }
        return {
            getInt: getInt
        }
    })();

    var init = function(demo=true) {
        if (demo ) {
            console.log("initiing sdk as demo");
            rng = localRng;
        } else {
            console.log("ALERT, REAL not implemented")
        }
    };
    return {
        init:init,
        rng:rng,
    }
})();

main.js

  sdk.init(true);
  var start = sdk.rng.getInt(1,12);

문제는 sdk.rng가 정의되지 않았다는 것입니다.

이렇게 하드 코딩하면 :

    var rng = (function() {
        var getInt = function(min, max) { // min and max included 
            return Math.floor(Math.random() * (max - min + 1) + min);
        }
        return {
            getInt: getInt
        }
    })();

위의 작동합니다.

핵심은 데모 모드 또는 리얼 모드에서 게임을 플레이 할 수 있으므로 SDK가 내부에서 작업하는 방식 (즉, 사용하는 개체, 데모 또는 실제 개체)을 전환 할 수 있어야한다는 것입니다. 분명히 실제 sdk와 실제 rng에는 개인 및 공용 모두 더 많은 기능이 있습니다 (반환 됨)

도움을 주시면 감사하겠습니다.

확실한 성능

당신이 할 때

return {
    init:init,
    rng:rng,
}

init속성이 현재 참조 init(함수)를 rng가리키고 속성이 현재 참조 rng(이 undefined)를 가리키는 객체를 반환합니다 . 대신 로컬 변수에 대한 참조 동적으로 반환 하려는 것처럼 들립니다 rng. 반환 된 객체의 rng속성을 해당 로컬 변수를 반환 하는 getter 로 만들어 수행 할 수 있습니다 .

return {
    init:init,
    get rng() {
      return rng;
    }
}

var sdk = (function () {
    var rng;
    var localRng = (function() {
        var getInt = function(min, max) { // min and max included 
            return Math.floor(Math.random() * (max - min + 1) + min);
        }
        return {
            getInt: getInt
        }
    })();

    var init = function(demo=true) {
        if (demo ) {
            console.log("initiing sdk as demo");
            rng = localRng;
        } else {
            console.log("ALERT, REAL not implemented")
        }
    };
    return {
        init:init,
        get rng(){
          return rng;
        }
    }
})();
sdk.init(true);
var start = sdk.rng.getInt(1,12);
console.log(start);

그러나 변수를 재 할당하는 대신 반환 된 객체에 대한 참조를 저장하고 init호출 될 때 해당 속성에 할당하는 것을 고려할 수 있습니다 .

var sdk = (function () {
    var rng;
    var localRng = (function() {
        var getInt = function(min, max) { // min and max included 
            return Math.floor(Math.random() * (max - min + 1) + min);
        }
        return {
            getInt: getInt
        }
    })();

    var init = function(demo=true) {
        if (demo ) {
            console.log("initiing sdk as demo");
            returnedObj.rng = localRng;
        } else {
            console.log("ALERT, REAL not implemented")
        }
    };
    const returnedObj = { init };
    return returnedObj;
})();
sdk.init(true);
var start = sdk.rng.getInt(1,12);
console.log(start);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

자바 스크립트 객체에서 여러 변수를 반환하는 적절한 방법

분류에서Dev

자바 스크립트는 객체에서 동적으로 생성 된 함수

분류에서Dev

자바 스크립트에서 두 개의 객체를 반환하는 방법

분류에서Dev

자바 스크립트에서 비동기 함수를 사용하여 객체 값을 할당하는 방법

분류에서Dev

자바 스크립트에서 반복적으로 함수를 호출하는 것보다 간단한 방법

분류에서Dev

자바 스크립트에서 동적으로 요소 ID를 얻는 방법

분류에서Dev

자바 스크립트에서 객체 속성 문자열을 정수로 변환하는 방법

분류에서Dev

자바 스크립트에서 JSON 객체를 반복하는 동안 동적으로 값 삽입

분류에서Dev

자바 스크립트에 의해 동적으로 생성 된 객체에서 이벤트 핸들러를 사용하는 방법

분류에서Dev

자바 스크립트에서 객체를 반복 한 후 프라 미스를 반환하는 방법

분류에서Dev

자바 스크립트에서 중첩 된 객체로 객체를 병합하는 방법

분류에서Dev

자바 스크립트에서 배열 객체를 중첩 객체로 변경하는 방법

분류에서Dev

자바 스크립트 비동기 함수에서 반환 값에 액세스하는 방법

분류에서Dev

객체를 문자열 자바 스크립트로 변환하는 방법

분류에서Dev

객체 키 도트 표기법을 자바 스크립트에서 객체 트리로 변환하는 방법

분류에서Dev

함수의 결과를 외부 자바 스크립트 스크립트에서 pug 파일로 반환하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트에서 동적으로 텍스트 상자를 만드는 방법

분류에서Dev

vueJS 2, 자바 스크립트를 컴포넌트에 동적으로 바인딩하는 방법

분류에서Dev

조건문으로 자바 스크립트에서 객체를 제거하는 방법

분류에서Dev

자바 스크립트의 비동기 함수에서 값을 반환하는 가장 좋은 방법

분류에서Dev

자바 스크립트의 객체 값에서 키를 반환하는 방법은 무엇입니까?

분류에서Dev

문자열을 반환하는 함수를 통한 자바 스크립트 동적 객체 속성

분류에서Dev

자바 스크립트 : 변수를 동적으로 타겟팅하는 방법

분류에서Dev

자바 스크립트에서 함수 값을 반환하는 방법

분류에서Dev

자바 스크립트 개체 "정의되지 않음". map 및 Promise.all () 함수로 객체를 반환하는 방법

분류에서Dev

로드 직후 동적으로로드 된 자바 스크립트에서 함수를 실행하는 방법은 무엇입니까?

분류에서Dev

로드 직후 동적으로로드 된 자바 스크립트에서 함수를 실행하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트 / JQuery로 객체를 만드는 방법

분류에서Dev

자바 스크립트에서 동적으로 생성 된 onclick 함수에 인수를 삽입하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    자바 스크립트 객체에서 여러 변수를 반환하는 적절한 방법

  2. 2

    자바 스크립트는 객체에서 동적으로 생성 된 함수

  3. 3

    자바 스크립트에서 두 개의 객체를 반환하는 방법

  4. 4

    자바 스크립트에서 비동기 함수를 사용하여 객체 값을 할당하는 방법

  5. 5

    자바 스크립트에서 반복적으로 함수를 호출하는 것보다 간단한 방법

  6. 6

    자바 스크립트에서 동적으로 요소 ID를 얻는 방법

  7. 7

    자바 스크립트에서 객체 속성 문자열을 정수로 변환하는 방법

  8. 8

    자바 스크립트에서 JSON 객체를 반복하는 동안 동적으로 값 삽입

  9. 9

    자바 스크립트에 의해 동적으로 생성 된 객체에서 이벤트 핸들러를 사용하는 방법

  10. 10

    자바 스크립트에서 객체를 반복 한 후 프라 미스를 반환하는 방법

  11. 11

    자바 스크립트에서 중첩 된 객체로 객체를 병합하는 방법

  12. 12

    자바 스크립트에서 배열 객체를 중첩 객체로 변경하는 방법

  13. 13

    자바 스크립트 비동기 함수에서 반환 값에 액세스하는 방법

  14. 14

    객체를 문자열 자바 스크립트로 변환하는 방법

  15. 15

    객체 키 도트 표기법을 자바 스크립트에서 객체 트리로 변환하는 방법

  16. 16

    함수의 결과를 외부 자바 스크립트 스크립트에서 pug 파일로 반환하는 방법은 무엇입니까?

  17. 17

    자바 스크립트에서 동적으로 텍스트 상자를 만드는 방법

  18. 18

    vueJS 2, 자바 스크립트를 컴포넌트에 동적으로 바인딩하는 방법

  19. 19

    조건문으로 자바 스크립트에서 객체를 제거하는 방법

  20. 20

    자바 스크립트의 비동기 함수에서 값을 반환하는 가장 좋은 방법

  21. 21

    자바 스크립트의 객체 값에서 키를 반환하는 방법은 무엇입니까?

  22. 22

    문자열을 반환하는 함수를 통한 자바 스크립트 동적 객체 속성

  23. 23

    자바 스크립트 : 변수를 동적으로 타겟팅하는 방법

  24. 24

    자바 스크립트에서 함수 값을 반환하는 방법

  25. 25

    자바 스크립트 개체 "정의되지 않음". map 및 Promise.all () 함수로 객체를 반환하는 방법

  26. 26

    로드 직후 동적으로로드 된 자바 스크립트에서 함수를 실행하는 방법은 무엇입니까?

  27. 27

    로드 직후 동적으로로드 된 자바 스크립트에서 함수를 실행하는 방법은 무엇입니까?

  28. 28

    자바 스크립트 / JQuery로 객체를 만드는 방법

  29. 29

    자바 스크립트에서 동적으로 생성 된 onclick 함수에 인수를 삽입하는 방법은 무엇입니까?

뜨겁다태그

보관