-1
   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
};

谢谢

4

5 回答 5

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 内部在某些情况下注意到重复的字符串常量并优化掉冗余并非不可能。我不知道他们是否这样做。

于 2013-08-29T19:50:30.777 回答
4

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

var prompt = 'You must re-enter your password in order to...';
var obj = {
  msg1: prompt,
  msg2: prompt,
  otherMessage: 'Some string'
};
于 2013-08-29T19:52:18.837 回答
1

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

于 2013-08-29T19:55:10.477 回答
1

要扩展Pointy 的答案

您可以尝试这样做:

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;
于 2013-08-29T19:55:41.173 回答
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
}});
于 2013-08-29T20:04:45.417 回答