Синтаксис JavaScript для доступа к свойству объекта из области видимости объекта - PullRequest
1 голос
/ 06 марта 2012

У меня есть эта функция:

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 ]

3 голосов
/ 06 марта 2012

В строке «test» «this» еще не существует (поскольку вы находитесь в процессе его определения).

Однако, допустимо использовать это в функции конструкции, потому что это будет существовать при оценке этой функции (и будет указывать на то, что вы ожидаете, если не перепривязать функцию).

1 голос
/ 06 марта 2012

Как сказал Корбин - Вероятно, все же будет хорошей идеей прочитать одно из старых сообщений Джона Простое создание "Класса"

Следует указать на простой и быстрый способ создания объекта:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...