0

我正在制作一个游戏,我想在将敌人加载到游戏中之前将它们存储为对象。

var that = this;
this.enemies = {
    that.redCar : document.getElementById('red'),   
    that.sportsCar : document.getElementById('sport')
}

但这给了我一个语法错误。我认为that.redCar : document.getElementById('red')在一个对象中将等于在一个对象that.redCar = document.getElementById('red')之外。

我哪里错了?

4

5 回答 5

4

当您说 时this.enemies = { ... },您是在声明一个位于 内部的 Object 文字this,即:

this
  enemies
    redCar: ...
    sportsCar: ...

说 没有 意义that.redCar = ..., 因为 你 已经 在 里面 了enemies. 如果你想像这样访问它

this.enemies.redCar

那么你可以这样做:

this.enemies = {
    redCar : document.getElementById('red'),   
    sportsCar : document.getElementById('sport')
}

如果你想像这样访问它

this.redCar

然后根本不使用enemies,就这样做

this.redCar = document.getElementById('red'),   
this.sportsCar = document.getElementById('sport')
于 2013-09-22T20:50:52.900 回答
1

您似乎认为有必要this在将属性分配给 JavaScript 对象时声明关键字。

虽然在定义对象的构造函数时这可能是真的,就像这样......

function MyClass() {
    this.color = "blue";
}
var myObj = new MyClass();

...现在,情况并非如此。

当您使用“对象文字”语法 ( var myObj = { /*properties...*/ };) 时,this不需要;事实上,这是不允许的。

以下是您应该如何分配这些属性:

this.enemies = {
    redCar: document.getElementById('red'),   
    sportsCar: document.getElementById('sport')
};
于 2013-09-22T20:57:45.543 回答
0

您必须string用作对象键,因此that.redCar是非法的。

于 2013-09-22T20:50:39.543 回答
0

除非与您在代码中列出的功能范围不同,否则无需使用this. 只需声明一个对象文字:

enemies = {
    redCar : document.getElementById('red'),   
    sportsCar : document.getElementById('sport')
}

// example reference
enemies.redCar.className += " active";

另外,要小心this. 除非您this在函数范围内使用,否则您指的是窗口对象。除非您在未声明的函数范围内声明上述代码,否则this指的是全局对象。

于 2013-09-22T20:53:11.223 回答
-1

我认为最好将变量声明为对象,不是吗?你最好尝试:

var that = new Object();

代替:

var that = this;

或者这是什么声明?

于 2013-09-22T20:48:52.813 回答