Недавно я копался в Javascript, и одна вещь, которая меня поразила, - это привычка использовать одно и то же имя функции для метода получения и установки. Так что, если вы хотите узнать высоту вашего баннера в 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 не имеет реальных свойств (где установка значения может фактически выполнять код), паттер является тем, который реализует идиому свойства. (Даже если вы называете это чем-то другим.)
Таким образом, в языках, реализующих реальные свойства, вы должны сделать это вместо этого:
Если бы вы использовали шаблон JavaScript на языке, который обрабатывает свойства, вы бы сделали что-то ненормальное. Это, вероятно, не будет хорошей идеей. Обрабатывайте свойства так, как это делает язык, чтобы вы не путали других людей, работающих с вами.
источник
Я думаю, что вы ищете
properties
источник
person.salary('10000')
илиperson.salary()
или аналогичном.Я полностью против этого по простой причине: класс, метод или функция должны делать только одно - по моему мнению, и объединять
getter
иsetter
метод будет нарушать это правило. В результате:return
Значение функции изменяется в зависимости от того, если геттер или сеттера блок получить выполнен. Это может просто привести вас в кошмар ремонтопригодности. Ваш метод должен возвращать только один тип данных / объекта в любом случае - или возвращатьnull
,false
или выдаватьexception
в случае ошибки.Blrfl
ответе.источник