用于从对象范围内访问对象属性的JavaScript语法

时间:2012-03-06 06:57:36

标签: javascript object

我有这个功能:

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,还是应该以不同的方式完成?

2 个答案:

答案 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();