2014-10-26 118 views
-1
var TTT = { 
     canvas  : document.getElementById('canvas'), 
     ctx   : canvas.getContext('2d'), 
     cH   : 600, 
     cW   : 600, 
     // tile dimensions 
     tH   : this.cH/3, 
     tW   : this.cW/3 
    }; 

// returns undefined... why? 
console.log(TTT.tH); 

這一定是很簡單的東西,但我似乎無法把握爲什麼這是不確定的...爲什麼這返回undefined?

回答

5

當您設置TTT.tHtWthis指周圍的情況下,不是對象本身。您目前無法將其設置爲TTT.cH,因爲尚未定義。你可以做的是在最初定義對象之後設置它們。

var TTT = { 
     canvas  : document.getElementById('canvas'), 
     ctx   : canvas.getContext('2d'), 
     cH   : 600, 
     cW   : 600 
    }; 

// tile dimensions 
TTT.tH = TTT.cH/3; 
TTT.tW = TTT.cW/3; 

// returns undefined... why? 
console.log(TTT.tH); 

編輯:作爲由奧里奧爾評論指出的那樣,你需要爲TTT.ctx也這麼做,因爲canvas尚未確定。

+0

+1,但我認爲他想引用同一個對象的屬性,在這種情況下,他應該使用對象名稱(TTT)而不是'this'。 – fardjad 2014-10-26 15:04:47

+0

可能'TTT.ctx'應該設置爲'TTT.ctx = TTT.canvas.getContext('2d')' – Oriol 2014-10-26 15:04:48

+0

@fardjad糟糕,錯過了。現在修復。 :) – Scimonster 2014-10-26 15:05:40

2

除了我發佈above的答案之外,還有第二種完全不同的方法。這是通過使用getters and setters

如果你不關心能夠在以後重置TTT.tHTTT.tW,你可以將它們定義爲干將:

var TTT = { 
     canvas  : document.getElementById('canvas'), 
     ctx   : canvas.getContext('2d'), 
     cH   : 600, 
     cW   : 600, 
     // tile dimensions 
     get tH() { return this.cH/3 }, 
     get tW() { return this.cW/3 } 
    }; 

// returns undefined... why? 
console.log(TTT.tH); 

在這裏,它被定義爲一個函數,所以this會的確在那裏工作。

+0

是的!這對我來說似乎更加整潔。不知道你可以像這樣在JavaScript中使用getter和setter。 – Feddman 2014-10-26 15:14:18

+0

這可能會提供一個很好的解決方案,但它不能回答這個問題。 – curiousdannii 2014-10-27 14:07:40