D3.js를 학습하면서 blog post을 통해 재사용 가능한 코드 단위의 기본 디자인 패턴을 설명했습니다. 아래 관련 코드를 다시 작성했습니다. 패턴이 아래에 제시된 방식은 D3 코드베이스 및 플러그인 (example)에서 사용되는 것과 정확히 같습니다.리팩터링 방법을 찾고 있습니다. D3.js 스타일의 메소드 체인 패턴
이 코드와 관련된 한 가지 문제점은 속성에 대한 복사 붙여 넣기가 너무 많다는 것입니다. JavaScript는 함수형 언어이므로 상용구 코드를 다시 고려할 수있을 것이라고 생각했지만 어떻게해야 할 지 생각할 수 없습니다. arguments
및 value
매개 변수는 일반적인 함수로 전달하기가 쉽지만 width
및 height
속성에 대한 참조를 유지할 수있는 방법을 찾을 수 없습니다.
function chart() {
var width = 720, // default width
height = 80; // default height
function my() {
// generate chart here, using `width` and `height`
}
my.width = function(value) {
if (!arguments.length) return width;
width = value;
return my;
};
my.height = function(value) {
if (!arguments.length) return height;
height = value;
return my;
};
return my;
}
이 (재 인수 분해가 가능한 경우 궁금한데,하지만 난 그게이 높은 우선 순위 문제가 없다는 문제가 단순히입니다 바라고, 그것이 실제 D3 코드베이스에 어떻게하는지이라는 사실 새로운 기여자는 이전에 어떻게했는지에 따라 이런 식으로하고 있습니다.
나는 기본적으로 모든 접근의 신체를 대체 무엇을 찾고 있어요 :
my.height = function(value) {
return getSet(arguments, value, whatever);
};
이 호출에 대한 몇 가지 상용구가 여전히 있지만 적어도 논리가 중앙 집중식이며, 단 한 곳에서 업데이트 할 수 있습니다, 필요한 경우.
정확히 무엇을 찾으십니까? 당신이 php의 "마법"getter/setter와 같은 것을 원한다는 것을 들린다. 어떤 속성을 돌보거나 가져 오거나 설정하는 단일 함수. 그럴까요? – bfavaretto
@bfavaretto이 질문을 명확히하기 위해 업데이트되었습니다. –
흠, 아마도 [this] (http://stackoverflow.com/a/543820/825789)와 같은 것이 필요할 것입니다. – bfavaretto