javascript属性值依赖于其他属性

时间:2012-05-22 15:46:57

标签: javascript

我创建了一个名为Fullscreen的对象,并在对象内另一个名为directions的对象。所以我的代码看起来像这样:

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

但我希望能够从对象外部设置FullScreen.directions.prev,并将FullScreen.directions.next更改为prev的负值。任何想法如何做到这一点?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

要自动完成此操作,您需要在get对象上使用setdirections函数。

理想情况下,您将拥有一个包含实际值的单独变量,每次set其中一个属性时,您都会更改该变量,但每次get检索计算出的值时从那个变量。

答案 2 :(得分:0)

您可以这样做:

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

然后,您可以与其互动并修改directions.current,而不是nextprev值。