为什么返回未定义

Why does this return undefined?

本文关键字:未定义 返回 为什么      更新时间:2023-09-26
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);

这一定是非常简单的事情,但我似乎无法理解为什么这是未定义的......

当你设置 TTT.tHtW 时,this指的是周围的上下文,而不是对象本身。您目前也无法将其设置为 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);

编辑:正如Oriol在评论中指出的那样,您也需要为TTT.ctx执行此操作,因为尚未定义canvas

除了我上面发布的答案之外,还有第二种完全不同的方法。那是通过使用吸气剂和二传手。

如果您不关心以后能够重置TTT.tHTTT.tW,您可以将它们定义为 getter:

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确实会在那里工作。