链接同一对象中的两个字符串

时间:2013-08-29 19:49:17

标签: javascript json object

   var object={
      firstString: 'You must register in order...',
      secondString:'You must re-enter your password in order to...',
      thirdString:'You must re-enter your password in order to...'
    };

如您所见,第二和第三个字符串是相同的。因为这在我现在使用的对象中多次发生,我想将第三个对象与第二个对象链接以节省一些字节

我尝试了以下但是它们不起作用

var object={
  firstString:'You must register in order...',
  secondString:'You must re-enter your password in order to...',
  thirdString:this.secondString
};

var object={
      firstString:'You must register in order...',
      secondString:'You must re-enter your password in order to...',
      thirdString:object.secondString
};

谢谢

5 个答案:

答案 0 :(得分:7)

您无法在对象文字中构造自引用表达式。您必须使用另一个语句跟进声明初始化。

var object={
  firstString='You must register in order...',
  secondString:'You must re-enter your password in order to...',
};
object.thirdString = object.secondString;

如果您真的想在单个表达式中初始化变量,可以使用函数:

var object = function() {
  var o = {
    firstString='You must register in order...',
    secondString:'You must re-enter your password in order to...',
  };
  o.thirdString = o.secondString;
  return o;
}();

请注意,现代JavaScript VM内核在某些情况下会注意到重复的字符串常量,并优化掉冗余并非不可能。我不知道他们是否这样做。

答案 1 :(得分:4)

你不能按照你想要的方式去做。对象文字在完成之前是不完整的,并且在完成之前无法引用它们。您已将字符串设置为变量,然后使用该变量。

var prompt = 'You must re-enter your password in order to...';
var obj = {
  msg1: prompt,
  msg2: prompt,
  otherMessage: 'Some string'
};

答案 2 :(得分:1)

最简单的方法是定义你所指的字符串是什么。例如。 string passwordAsk ='您必须重新输入密码才能......'。这也可以让您在将来更轻松地更改所有这些内容。

答案 3 :(得分:1)

展开Pointy's answer

您可以尝试这样做:

var Obj = (function () {

    function Obj() {
        this.obj = {};
    }

    Obj.prototype.set = function(name, value) {
         this.obj[name] = value;
    };

    return Obj;
})();

var object = new Obj();
object.set('firstString', 'You must register in order...');
object.set('secondString', 'You must re-enter your password in order to...');
object.set('thirdString', object.obj.secondString);

然后您可以使用object.obj作为对象。

您可以创建多个Obj对象,您可以以相同的方式使用它们。


您可以这样做,而不是使用一些复杂的Obj课程。

var object = {};
object.firstString = 'You must register in order...';
object.secondString = 'You must re-enter your password in order to...';
object.thirdString = object.secondString;

答案 4 :(得分:1)

或者,如果你想玩得开心,可以这样试试(免责声明:我不会这样做,但我很喜欢这个挑战)

function selfReferencer(generator) {
    var temp = generator.apply({});
    return generator.apply(temp);
}

然后像这样构建你的对象:

var obj = selfReferencer(function() { return {
    firstString: 'You must register in order...',
    secondString: 'You must re-enter your password in order to...',
    thirdString: this.secondString
}});