Answers:
Martin Fowler最近在本文中将其命名为Overloaded getter and setter :
最近,我一直在使用Javascript,而令我感到惊讶的是,习惯对getter和setter使用相同的函数名。因此,如果要在jQuery中查找横幅的高度,则可以使用
$("#banner").height()
,如果要更改高度,则可以使用$("#banner").height(100)
。我对这个约定很熟悉,因为它是Smalltalk所使用的。您可能会得到一个值,
banner height
并使用进行更改banner height: 100
。知道这是一次小谈话惯例足以让我喜欢它,因为我对这门语言有着遥远而持久的爱。但是即使是最好的东西也有缺陷,对于这种编码风格,我无法掩饰自己的不喜欢...尽管有这种偏好,您仍然必须遵循所使用语言的约定。如果我再次写Smalltalk,我仍然会使用它
height:100
来保持与语言约定的一致性。但是,Javascript并没有因为它具有强的约定而闻名,因此在这里我宁愿避免使用该约定,即使jQuery使用它也是如此。
在OO语言中称为“方法重载”,在非OO语言中称为“函数重载”。
无论是好的做法还是好礼,还是公众成员,这是否是一个好习惯一直是争论的话题。赞成和反对方面的人可能会切磋那些具有此功能或没有此功能且以自己的方式设置的语言。我使用它并且喜欢这种做法,原因有很多:
get
或set
方法名加上冗长。int
和一个用于double
),改变在分配(的LHS类型int x = foo.bar()
对double x = foo.bar()
)不需要代码变化(barAsInteger()
相对于barAsDouble()
如果类既提供)到右侧。不利的一面是,有时仅通过查看代码就可能很难准确地知道正在调用哪个方法。由于JavaScript没有实际属性(在其中设置值可以实际执行代码),因此模式是一种实现属性惯用语的模式。(即使您称之为其他名称。)
因此,在实现实物属性的语言中,您应改为:
element.css = ...
x = element.css
如果您要使用处理属性的语言使用JavaScript模式,那么您将做一些不正常的事情。 那可能不是一个好主意。 使用语言处理属性的方式来处理属性,因此您不会混淆与您一起工作的其他人。
我想你在找 properties
person.salary('10000')
或person.salary()
或相似。