为什么要使用;获得;javascript计数器的函数?

为什么要使用;获得;javascript计数器的函数?,javascript,counter,accessor,Javascript,Counter,Accessor,我想我理解了访问器中get和set函数的用途。但在一个教程(W3Schools)中,他们给出了这个例子。请注意,前三个是get,后两个是set。如果我们试图变异计数器,为什么它们都不设置 // Define an object var obj = {counter:0}; // Define Setters and Getters Object.defineProperty(obj, "reset", { get : function () {this.counter = 0;} });

我想我理解了访问器中get和set函数的用途。但在一个教程(W3Schools)中,他们给出了这个例子。请注意,前三个是
get
,后两个是
set
。如果我们试图变异
计数器
,为什么它们都不设置

// Define an object
var obj = {counter:0};

// Define Setters and Getters
Object.defineProperty(obj, "reset", {
  get : function () {this.counter = 0;}
});
Object.defineProperty(obj, "increment", {
  get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
  get : function () {this.counter--;}
});
Object.defineProperty(obj, "add", {
  set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
  set : function (value) {this.counter -= value;}
});

这里不是真正的变异/不变异,而是需要传递一个参数(
set
-在=运算符的右侧)或不(
get
)。如果你看看W3Schools给出的例子:

//玩计数器:
obj.reset;
obj.add=5;
obj.subtract=1;
目标增量;
目标减量;

您会注意到,
add
subtract
(“setter”)有参数(5和1),而
reset
/
increment
/
decreation
没有任何参数(“getter”)

这里不是真正的变异/不变异,而是需要传递一个参数(
set
-在=运算符的右侧)或不(
get
)。如果你看看W3Schools给出的例子:

//玩计数器:
obj.reset;
obj.add=5;
obj.subtract=1;
目标增量;
目标减量;

您会注意到,
add
subtract
(“setter”)有参数(5和1),而
reset
/
increment
/
decreation
没有任何参数(“getter”)

set
要求在
=
运算符的右侧有一个值

obj.add = 5
get
根本不需要
=
,因此不需要其他值

obj.increment

尽管如此,这是一个非常做作的例子。如果getter和setter名称是动词,则可能只希望它们是函数。

set
要求在
=
运算符的右侧有一个值

obj.add = 5
get
根本不需要
=
,因此不需要其他值

obj.increment

尽管如此,这是一个非常做作的例子。如果您的getter和setter名称是动词,那么您可能只希望它们是函数。

在add和subtract方法中使用set的原因是,它们接受函数的参数,而increment和decreation不接受。根据定义,getter不接受参数,而setter接受参数。从技术上讲,他们可以使用增量和减量的
set
,但这并没有太大区别,老实说,我没有看到很多人从一开始就使用getter/setter


这里有一个关于带参数的set/get之间的差异的详细解释,在add和subtract方法中使用set的原因是,它们将参数带到函数中,而increment和decreation不带参数。根据定义,getter不接受参数,而setter接受参数。从技术上讲,他们可以使用增量和减量的
set
,但这并没有太大区别,老实说,我没有看到很多人从一开始就使用getter/setter


下面是关于带参数的set/get之间区别的更多解释

我读到get和set是关键字,并且假设它们有不同的用途(因此受到限制)。如果“get”可以用来“设置”,为什么会有“get”的概念?“get”只能用于设置“静态”值(例如,在上面的示例中为0、+1、-1)。“set”可以用来设置“动态”值(例如+x,-y)@BretHess当getter或setter是一个函数时(正如您的示例中所示),您可以让该函数做很多事情。没有强制getter函数为只读的技术限制。它只是运行一些最终返回值的代码。强制setter实际设置值也没有技术限制。所有这些只是设置一些调用自定义函数的特殊语法
obj.property
调用一个可以做任何事情的自定义getter函数,并且
obj.property=newValue
调用一个可以做任何事情的自定义setter函数。@这是完全正确的,这就是为什么我没有看到很多人(如果有的话)使用getter/setter的原因。它们似乎是为了安抚传统的开发人员社区而添加的,而没有真正增加语言的功能集。它们模棱两可,而且实现是非协同的,这导致了OP的确切混乱。无论如何,这只是我的$0.02。我读到get和set是关键字,并且假设它们有不同的目的(因此受到限制)。如果“get”可以用来“设置”,为什么会有“get”的概念?“get”只能用于设置“静态”值(例如,在上面的示例中为0、+1、-1)。“set”可以用来设置“动态”值(例如+x,-y)@BretHess当getter或setter是一个函数时(正如您的示例中所示),您可以让该函数做很多事情。没有强制getter函数为只读的技术限制。它只是运行一些最终返回值的代码。强制setter实际设置值也没有技术限制。所有这些只是设置一些调用自定义函数的特殊语法
obj.property
调用一个可以做任何事情的自定义getter函数,并且
obj.property=newValue
调用一个可以做任何事情的自定义setter函数。@这是完全正确的,这就是为什么我没有看到很多人(如果有的话)使用getter/setter的原因。它们似乎是为了安抚传统的开发人员社区而添加的,而没有真正增加语言的功能集。它们模棱两可,而且实现是非协同的,这导致了OP的确切混乱。不管怎样,那只是我的0.02美元。