2012-05-22 5 views
0

Я создал объект под названием Fullscreen, а внутри объекта - другой объект, называемый направлениями. так что мой код выглядит следующим образом:Значение свойства javascript, зависящее от другого свойства

FullScreen = { 
    directions: { 
    prev: -1, 
    next: 1 
    } 
} 

, но я хочу, чтобы иметь возможность установить FullScreen.directions.prev извне объекта и изменить FullScreen.directions.next к отрицательному значению пред. любые идеи, как это сделать?

+0

И в чем проблема с этим? – VisioN

+2

Просто присвойте значения свойствам. Посмотрите на [MDN - Работа с объектами] (https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects), чтобы узнать основы об объектах. –

ответ

3

Если я правильно понял вопрос правильно, это так просто, как это:

FullScreen.directions.prev = -42; 
FullScreen.directions.next = -FullScreen.directions.prev; 

Это может быть лучше, однако, чтобы инкапсулировать эту логику в функции:

FullScreen = { 
    directions: { 
    prev: -1, 
    next: 1, 
    setPrev: function (value) { 
     value = +value; // coerce to number 
     this.prev = value; 
     this.next = -value; 
    } 
    } 
} 

// then 
FullScreen.direction.setPrev(-42); 

Вы можете получить даже фантазер с помощью special get/set syntax:

FullScreen = { 
    directions: { 
    _prev: -1, 
    _next: 1, 
    get prev() { 
     return this._prev; 
    }, 
    set prev(value) { 
     value = +value; // coerce to number 
     this._prev = value; 
     this._next = -value; 
    }, 
    get next() { 
     return this._next; 
    } 
    } 
} 

// then 
FullScreen.direction.prev = -42; 
// invokes the setter function behind the scenes, so that _next is also set 
+0

спасибо! что я имел в виду. первый вариант, который вы упомянули, ничего не сделал. даст ему еще одну попытку! –

+0

Что значит «ничего не делал?» Я уверен, что код верен. –

+0

безразлично ... это тоже сработало. забыл персонаж где-то, который остановил сценарий от запуска . Я использую это сейчас: get next() {return this.prev * -1} также дает мне то, что я хочу –

0

Для того, чтобы это произошло automagica вам нужно будет использовать функции get и set на объекте directions.

В идеале у вас будет отдельная переменная, которая содержит фактическое значение, и каждый раз, когда вы используете одно из свойств, вы изменяете эту переменную, но каждый раз, когда вы get, вы извлекаете значение, рассчитанное из этой переменной.

0

Вы можете сделать что-то вроде этого:

var directions = { 
    current: 0, 
    prev: function() { 
     return -current; 
    }, 
    next: function() { 
     return current; 
    } 
}; 

И тогда вы можете взаимодействовать с ним и изменить ваш directions.current вместо любого из next или prev значений.

Смежные вопросы