string.replace替换引用字符串

时间:2016-04-20 09:25:27

标签: javascript

我在下面有一个文本替换功能,

function msgConstructor(type, language, withUserName, userName) {
    var txtAndPayloadType = {}
    switch (language) {
        case Enums.DeviceLanguages.tr:
            txtAndPayloadType = Dictionary.tr.notifications[type]
            break;
        case Enums.DeviceLanguages.en:
        default:
            txtAndPayloadType = Dictionary.en.notifications[type]
            break;
    }
    txtAndPayloadType.text = txtAndPayloadType.text.replace('[userName]', userName).replace('[withUserName]', withUserName)
    return txtAndPayloadType;
}

我从Dictionary获取值到单独的var但不知何故.replace调用它的文本影响Dictionary中的值。我认为这与原型级有关。我怎样才能真正将值从Dictionary复制到新的var?

1 个答案:

答案 0 :(得分:2)

当你创建一个这样的对象时:

var a = { a: 1 };
var b = a;

a仅引用b。无论您是在a还是b更改属性,它都是您正在更新的同一个对象。

b.a = 2;
console.log(a.a);     // Outputs 2
console.log(b.a);     // Outputs 2
console.log(a === b); // Outputs true

对于字符串,它不会像这样工作:

var a = "a";
var b = a;
b = "b";
console.log(a);       // Outputs "a"
console.log(b);       // Outputs "b"
console.log(a === b); // Outputs false

您可以做的是,只复制text属性,其中包含一个字符串:

var newText;
switch (language) {
    case Enums.DeviceLanguages.tr:
        newText = Dictionary.tr.notifications[type].text;
        break;
    case Enums.DeviceLanguages.en:
    default:
        newText = Dictionary.en.notifications[type].text;
        break;
}
return {
  text: newText
    .replace('[userName]', userName)
    .replace('[withUserName]', withUserName)
};