我有这个功能:
function Entity(textureSrc)
{
var entity = {
texture: textureSrc,
position: { x: 0, y: 0 },
test: this.texture,
construct: function()
{
alert(this.test);
}
}
return entity;
}
然后是这个测试代码:
var testObject = Entity("Textures/AirTexture.png");
testObject.construct();
作为测试,我在为entity.texture
创建新属性时尝试使用entity
的值 - 我无法弄清楚要执行此操作的语法是什么。
我试过了:
test: this.texture
test: entity.texture
test: texture
但这些都不起作用;它们都会产生undefined
。
此外 - 使用this
方法中的construct
一词是否正确访问test
,还是应该以不同的方式完成?
答案 0 :(得分:3)
在“测试”行上,“此”尚不存在(因为您正在定义它)。
然而,在构造函数中使用它是有效的,因为此将在评估该函数时存在(并且除非重新绑定函数,否则将指向您所期望的内容)。 / p>
答案 1 :(得分:1)
正如 Corbin 所述 - 阅读约翰斯的一篇旧帖Simple "Class" Instantiation
可能仍然是一个好主意应该指向一种简单快速的对象创建方法:
function Entity(textureSrc) {
if ( !(this.instanceof Entity) ) {
return new Entity(textureSrc)
}
this.texture = textureSrc,
this.position = {
x: 0,
y: 0
}
}
Entity.prototype = {
construct: function () {
alert(this.texture)
}
}
通过这种方式,您可以按照描述的方式实现实体:
var testObject = Entity("Textures/AirTexture.png");
testObject.construct();