1

我制作了一个名为 Fullscreen 的对象,并在该对象中创建了另一个名为方向的对象。所以我的代码如下所示:

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

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

4

3 回答 3

4

如果我正确理解了这个问题,就这么简单:

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);

使用特殊get/set语法你可以变得更漂亮:

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
于 2012-05-22T15:48:35.060 回答
0

要自动实现这一点,您需要在对象上使用getset函数。directions

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

于 2012-05-22T15:49:56.010 回答
0

你可以这样做:

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

然后你可以与它交互并修改你的而directions.current不是值。nextprev

于 2012-05-22T16:04:45.850 回答