我制作了一个名为 Fullscreen 的对象,并在该对象中创建了另一个名为方向的对象。所以我的代码如下所示:
FullScreen = {
directions: {
prev: -1,
next: 1
}
}
但我希望能够从对象外部设置 FullScreen.directions.prev,并将 FullScreen.directions.next 更改为 prev 的负值。任何想法如何做到这一点?
我制作了一个名为 Fullscreen 的对象,并在该对象中创建了另一个名为方向的对象。所以我的代码如下所示:
FullScreen = {
directions: {
prev: -1,
next: 1
}
}
但我希望能够从对象外部设置 FullScreen.directions.prev,并将 FullScreen.directions.next 更改为 prev 的负值。任何想法如何做到这一点?
如果我正确理解了这个问题,就这么简单:
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
要自动实现这一点,您需要在对象上使用get
和set
函数。directions
理想情况下,您将拥有一个包含实际值的单独变量,并且每次您使用set
其中一个属性时,您都会更改该变量,但每次get
您检索从该变量计算的值时。
你可以这样做:
var directions = {
current: 0,
prev: function () {
return -current;
},
next: function () {
return current;
}
};
然后你可以与它交互并修改你的而directions.current
不是值。next
prev