0

공개 모듈 패턴으로 구조화 된 모듈을 작성했습니다. 여기에는 과부하로 작동하는 하위 모듈이 포함됩니다. 메인 모듈의 몇몇 기능은 서브 모듈을 통해서만 사용자 코드와 함께 사용해서는 안되는 매개 변수를 가지고 있습니다. 하위 모듈에서 매개 변수에 액세스 할 수 있지만 "외부 사용자 코드"를 사용할 수 없게하려면 어떻게해야합니까? 다른 레이어를 만들어야하나요?JS 공개 모듈 패턴 : 사용자 코드에 의해 사용되어서는 안되는 매개 변수

var someNamespace = someNamespace || {}; 

someNamespace.someModule = (function() { 

    // _customSiteUrl, _customToken shouldn't be available via usercode 
    function create(listName, data, _customSiteUrl, _customToken) { 
     ... 
    } 
    var XS = (function() { 
     return { 
      createXS: function (siteUrl, listName, data) { 
       ... 
       create(listName, data, siteUrl, token); 
      } 
     } 
    })(); 

    return { 
     create: create, 
     XS: XS, 
     ... 
    } 
})(); 

someNamespace.someModule.create("hi", {}, "https://...", "someHash"); //Should not be possible!! 
someNamespace.someModule.create("hi", {}); //Should be used 

답변

1

.someModule에 다른 "레이어"를 추가하여 사용자가 액세스 할 수없는 변수를 로컬로 선언하고 기본 기능 대신이 레이어의 반환 값 create: 속성을 변경할 수 있습니다.

원하는만큼 많은 "오버로드"를 만들 수 있지만 모두 "오버로드"에서 선언 한 매개 변수와 동일하게 유지됩니다. 과부하가 기본 함수 (create)로 전달되는 것은 완전히 전적으로 귀하에게 달려 있습니다.

someNamespace.someModule = (function() { 

    // _customSiteUrl, _customToken shouldn't be available via usercode 
    function create(listName, data, _customSiteUrl, _customToken) { 
     ... 
    } 

    function userAccessibleCreate() { 
     return create(parameters, you, want); 
    }; 
    var XS = (function() { 
     return { 
      createXS: function (siteUrl, listName, data) { 
       ... 
       create(listName, data, siteUrl, token); 
      } 
     } 
    })(); 

    return { 
     create: userAccessibleCreate, 
     XS: XS, 
     ... 
    } 
})(); 

이제 사용자는 someNamespace.someModule.create("hi", {}); 만 할 수 있습니다.

1

는 내가 제대로 이해하고 있는지 확실하지 않습니다,하지만 당신은 함수를 만드는 대중 직면에서 매개 변수 _customSiteUrl 등을 제거하려는 경우, 당신은 같은 것을 사용할 수 있습니다 :이 있다고 가정

return { 
    create: function(listName, data) { 
     return create(listName, data, _customSiteUrl, _customToken); 
    }, 
    XS: XS, 
    ... 
}; 

_customSiteUrl_customToken은 서브 모듈의 범위에서 정의됩니다. 기본적으로 공용 API는 추가 매개 변수가있는 개인 API를 호출합니다.

카레 또는 부분 응용 프로그램 기능을 사용할 수도 있지만 그 내용은 귀하에게 맡깁니다.

+0

글쎄, 내가 무슨 뜻인지 이해하지 못했다. Crowes의 답변을 참조하십시오. 시간 내 주셔서 감사합니다. – sandrooco

+0

그것은 기본적으로 다르게 코딩 된 것과 같습니다. Crowes는'userAccessibleCreate' 함수에 공용 매개 변수 (매개 변수, 원하는 경우)를 추가해야합니다. 왜냐하면 작성된 것처럼 arguments 객체를 사용하지 않고 명명 된 매개 변수를 허용하지 않기 때문입니다. – Shilly