使用Javascript中的对象存储DOM元素

时间:2013-09-22 20:46:15

标签: javascript dom object

我正在制作一个游戏,我希望将敌人作为对象存储,然后再加载到游戏中。

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')

我哪里错了?

5 个答案:

答案 0 :(得分:4)

当你说this.enemies = { ... }时,你声明一个位于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')

答案 1 :(得分:1)

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

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

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

...现在,这是的情况。

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

以下是分配这些属性的方法:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

除非您的代码中列出的函数范围不同,否则无需使用this。只需声明一个对象文字:

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

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

另外,请注意this。除非您在函数范围内使用this,否则您指的是窗口对象。除非您在未声明的函数范围内声明上述代码,否则this将引用全局对象。

答案 4 :(得分:-1)

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

var that = new Object();

而不是:

var that = this;

或者这是什么声明?