Ссылаясь на переменную внутри класса ... когда "это".не работает, потому что мы находимся в функции - PullRequest
0 голосов
/ 11 февраля 2012

Скажем, есть классный робот.

Есть переменные hand lefthand, hand righthand, leg leftleg и leg rightleg.Классы leg и hand содержат int length и int width.

this.lefthand.length = 100;
this.leftleg.length = 200;

function switch_length () {
this.lefthand.length = 300; //This is wrong. So what can I do instead to refer to lefthand??
this.leftleg.length = 400; //This is wrong. So what can I do instead to refer to leftleg??
}

this.button.addEventlistener ( ... switch_length())

1 Ответ

0 голосов
/ 12 февраля 2012

В Javascript вы можете определить контекст вызываемых функций.Я лучше объясню это на примерах, так что вот так:

var something = {
    'foobar': 'var 1 value',
    'foo': function () {
        alert(this.var1);
    }
}

var something_else = {
    'foobar': 'some completely other value'
}

function bar () {
    alert(this.foobar);
}

something.foo(); //alerts 'var 1 value'
bar(); //produces an error
bar.call(something); //alerts 'var 1 value'
bar.call(something_else); //alerts 'some completely other value'

function.call(context, [arg1, [arg2, [...]]]);

Если вы ответили на ваш вопрос, обязательно примите мой ответ.*

Редактировать: Вот еще один пример

function create () {
    return  {
        'hand': {
            'length': 100
        },
        'leg': {
            'length': 100
        }
    }
}

function set_length(hand, leg) {
    this.hand.length = hand;
    this.leg.length = leg;
}

var left = create(),
    right = create();

set_length.call(left, 200, 300);
set_length.call(right, 50, 150);
...