用函数返回的值更新初始化的字符串

Update a string who was init with values returned from a function

本文关键字:初始化 字符串 更新 返回 函数      更新时间:2023-09-26

是否有一种方法来更新一个字符串谁是从函数返回的值初始化?

下面是我所说的一个例子:

var level = 1,
    returnLevel = function() {
        return level;
    },
    str = 'level: ' + returnLevel();
level = 2;
// how to update the var str without doing 'level:' + level?

编辑:真实代码,因为它被要求(我缩小了很多代码):

function returnPrice(what) {
    return g.items[what].baseCost;
};
g.items = {
    'item-1': {
        baseCost: 100
    },
    'item-2': {
        baseCost: 1000
    },
    'item-3': {
        baseCost: 5000
    }
};
g.console.commands = [
    {
        name: 'buy',
        desc: 'command desc',
        commands: [
            {
                name: 'buy item',
                desc: 'buy specified item',
                customDesc: [
                    'test desc $' + returnPrice('item-1') + '.',
                    'test desc $' + returnPrice('item-2') + '.',
                    'test desc $' + returnPrice('item-3') + '.'
                ]
            }
        ]
    }
];

另一种方法是使用str作为函数,并实现toString方法来调用不带括号的实际值。

var level = 1,
    returnLevel = function () {
        return level;
    },
    str = function () {
        function f() { }
        f.toString = function () {
            return 'level: ' + returnLevel();
        }
        return f;
    }();
console.log(str);
level = 2;
console.log(str);

你不能那样做;您可能想要这样做:

var returnString = function(level) {
        return 'level: ' + level;
    },
    str = returnString(1);
console.log(str);
str = returnString(2);
console.log(str);
// also possible:
console.log(returnString(3));

查看get和set。

//The closure is just to make 'level' private
let obj = (() => {
  let level = 0;
  return {
    get levelString() { return "level: " + level; },
    set level(val) { level = val; }
  };
})();
console.log(`Before: '${obj.levelString}'`);
obj.level = 4;
console.log(`After: '${obj.levelString}'`);

编辑:如果你不同意,至少给出一个解释。