2015-11-06 59 views
0

我知道它可以设置一个关键值在JavaScript中例如在JavaScript对象的另一个关键值

var obj = { 
      one: "yes", 
      two: obj.one 
      } 

OBJ [二]前面的键值指定键值现在等于“是”

我如何去设定值时,关键是在功能

var obj = { 
      one: function() { 
        return(
        two: "yes" 
        three: ?? //I want to set three to the value of two 
       ) 
      } 
      } 

我想有三个包含即obj.one()应返回的两个值{二:“是的”,三:“是”}

+2

“*我知道它有可能'var obj = {one:”yes“,two:obj.one}'*”。 NO,它抛出'类型错误:obj是undefined' – Oriol

+2

但也能够写'VAR OBJ = { \t \t \t之一: “是” \t \t} \t \t OBJ [ '2'] = obj.one ;' –

+0

这是真的,因为它在调试器中一次性工作的奇怪原因,很奇怪 – lboyel

回答

1

你的第一个代码不工作也没有。它抛出TypeError: obj is undefined

您可以使用

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 
+0

这是有道理的,好奇的问题为什么你必须返回一个新的功能,为什么不会只是返回和这项工作,我猜你正在使用一个构造函数来帮助,但我不清楚它为什么这样工作 – lboyel

+1

你意味着'新功能(){...}'?它创建一个空对象,并用设置为该新对象的'this'值来调用该函数。该对象返回。 – Oriol

+1

@lboyel最主要的原因是,当你定义每个键时,它们并不意味着以特定顺序表示,或按顺序添加。这个想法是,它正在被“构建”一次。因此理论上不可能引用“已经定义”的对象的一部分 - 对象是一次全部定义的,或者至少没有特定的顺序。 – Katana314

0

试试这个

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

console.log(obj) 
console.log(obj.one()) 
console.log(obj) 
相关问题