답변:
Martin Fowler는 최근 이 기사 에서 오버로드 된 getter 및 setter라는 이름을 지정했습니다 .
나는 최근에 자바 스크립트를 파고 들었고, 놀란 것은 게터와 세터에 동일한 함수 이름을 사용하는 습관입니다. 따라서 jQuery에서 배너의 높이를 찾으려면 사용
$("#banner").height()
하고 높이를 변경하려면 사용하십시오$("#banner").height(100)
.이 컨벤션은 스몰 토크에서 사용 된 것으로 친숙합니다. 값을 가져 와서
banner height
변경할 수 있습니다banner height: 100
. 그것이 작은 대화법이라는 것을 아는 것만으로도 나는 그 언어에 대한 먼 그러나 끊임없는 사랑을 가지고 있기 때문에 그것을 좋아할 것으로 기대하기에 충분합니다. 그러나 가장 좋은 것조차도 결함이 있으며이 코딩 스타일에 대한 싫어하는 것을 숨길 수 없습니다 ...이 환경 설정에도 불구하고 다루는 언어의 규칙을 따라야합니다. 스몰 토크를 다시 쓰고 있다면
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()
.
클래스, 메소드 또는 함수가 한 일을해야 - 내 의견으로는, 그리고 결합 : 나는 간단한 이유 좀 완전히 그에 대한 해요 getter
및 setter
방법은 해당 규칙을 위반하는 것입니다. 결과로서:
return
함수의 값은 경우에 따라 달라 게터 또는 세터 블록이 실행하자. 이것은 단순히 유지 보수의 악몽으로 이어질 수 있습니다. 귀하의 방법은 어떤 경우에도 데이터 / 객체의 하나의 유형을 반환해야합니다 - 또는 반환 null
, false
또는 던져 exception
오류의 경우.Blrfl
.