javascript:如何从对象动态返回函数
我正在尝试使用javascript创建一个SDK,使用标准对象模式。它工作得很好,除非我想动态配置一个结果对象,例如,如果它的演示使用一个简单的RNG,如果它是一个真实的游戏,使用一个HW RNG不同的RNG实现。以下内容不起作用: sdk.jsjavascript:如何从对象动态返回函数,javascript,Javascript,我正在尝试使用javascript创建一个SDK,使用标准对象模式。它工作得很好,除非我想动态配置一个结果对象,例如,如果它的演示使用一个简单的RNG,如果它是一个真实的游戏,使用一个HW RNG不同的RNG实现。以下内容不起作用: sdk.js var Sdk = (function () { var rng; var localRng = (function() { var getInt = function(min, max) { // min and ma
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的当前引用。听起来您希望动态返回对局部变量rng的引用,这可以通过将返回对象的rng属性设置为返回该局部变量的getter来实现:
return {
init:init,
get rng() {
return rng;
}
}
var sdk=函数{
var-rng;
var localRng=函数{
var getInt=functionmin,max{//min和max包括在内
返回Math.floorMath.random*max-min+1+min;
}
返回{
getInt:getInt
}
};
var init=functiondemo=true{
如果演示{
console.loginiting sdk作为演示;
rng=localRng;
}否则{
console.logALERT,未实现REAL
}
};
返回{
init:init,
获取rng{
返回rng;
}
}
};
sdk.inittrue;
var start=sdk.rng.getInt1,12;
console.logstart;你的第一个解决方案很有效。我从来没有想到get关键字在这里起作用,或者您不需要像sdk.rng.get.getInt1,12这样的东西。