2015-11-06 56 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) 
相關問題