표준 개체 패턴을 사용하여 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] 삭제
몇 마디 만하겠습니다