2014-10-26 120 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