Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用JavaScript对象中的另一个键值分配键值_Javascript_Javascript Objects - Fatal编程技术网

用JavaScript对象中的另一个键值分配键值

用JavaScript对象中的另一个键值分配键值,javascript,javascript-objects,Javascript,Javascript Objects,例如,我知道在Javascript中可以使用前面的键值设置键值 var obj = { one: "yes", two: obj.one } obj[two]现在等于“是” 当键在函数中时,如何设置值 var obj = { one: function () { return( two: "yes"

例如,我知道在Javascript中可以使用前面的键值设置键值

var obj = {
            one: "yes",
            two: obj.one
          }
obj[two]现在等于“是”

当键在函数中时,如何设置值

var obj = {
             one: function () {
                  return(
                     two: "yes"
                     three: ?? //I want to set three to the value of two
                  )
             }
          }
我想让三个值包含两个值,即obj.one()应该返回{two:“yes”,twree:“yes”}

试试这个

var obj = {
    one: function () {
            this.two = "yes"
            this.three = "??"
    }
}

console.log(obj)
console.log(obj.one())
console.log(obj)

你的第一个代码也不起作用。它抛出类型错误:obj未定义

你可以用

var obj = new function(){
  this.one = "yes",
  this.two = this.one
}; // { one: "yes", two: "yes" }
var obj = {
  one: function () {
    return new function() {
      this.two = "yes",
      this.three = this.two
    };
  }
};
obj.one(); // { two: "yes", three: "yes" }
obj.one() === obj.one(); // false
对于第二个,您可以使用

var obj = new function(){
  this.one = "yes",
  this.two = this.one
}; // { one: "yes", two: "yes" }
var obj = {
  one: function () {
    return new function() {
      this.two = "yes",
      this.three = this.two
    };
  }
};
obj.one(); // { two: "yes", three: "yes" }
obj.one() === obj.one(); // false
注意每次调用
one
都会生成对象的新副本。如果要重复使用上一个

var obj = {
  one: (function () {
    var obj = new function() {
      this.two = "yes",
      this.three = this.two
    };
    return function(){ return obj }
  })()
};
obj.one(); // { two: "yes", three: "yes" }
obj.one() === obj.one(); // true

“我知道有可能
varobj={one:“yes”,two:obj.one}
”。否,它抛出
TypeError:obj是未定义的
,但可以写入
var obj={one:“yes”}obj['two']=obj.one没错,出于一个奇怪的原因,它在调试器中一次性工作,weird@lboyel,我不明白的是,你想实现什么?这是有意义的,奇怪的问题,为什么你必须返回一个新函数,为什么不返回,这项工作,我猜你是在使用构造函数来帮助,但是我不清楚为什么它是这样工作的你是说
newfunction(){…}
?它创建一个空对象,并使用设置为该新对象的
this
值调用该函数。返回该对象。@lboyel主要原因是定义每个键时,它们不应按特定顺序表示或按顺序添加。这个想法是,它正在一次“建造”。因此,从理论上讲,不可能引用“已经定义”的对象的一部分-对象一次定义完,或者至少没有特定的顺序。请原谅我的无知,但我要说的是,与使用新函数语法创建对象的构造函数相比,使用键值对象表示法的构造函数的工作方式有所不同,因为在这种情况下,您可以引用已定义的属性“this.two”,而在前面的情况下,这是不可能的?@lboyel Yes。不能在对象的文字定义内引用对象。但是,如果您实例化一个函数,构造函数将引用该实例,因此它可以读取以前的属性。