我正在制作一个游戏,我希望将敌人作为对象存储,然后再加载到游戏中。
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')
。
我哪里错了?
答案 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;
或者这是什么声明?