2010-06-07 3 views
0

Mootools 클래스에는 새 객체가 인스턴스화 될 때 호출되는 initialize() 메서드가 있습니다.Mootools에서 initialize()와 setup() 사용

setup()도 일반적으로 사용되는 것으로 보입니다.

setup()의 목적은 무엇인가 :

대부분의 클래스 나, 다른 곳 initialize()에서 전화 this.setup() 관찰 한은 궁금 나에게 남아있다? 그냥 setup() 코드를 initialize()에 넣는 것이 어떻습니까? setup() 방법은 언제 사용합니까?

답변

1

mootools 클래스의 초기화 함수에서만 호출되는 setup/build/whatever 함수를 사용하면 아무런 이점이 없습니다.

가변 함수 인수가없는 언어에서는 구별이 오히려 다른 인수 집합을 사용하여 함수 이름을 오버로드합니다. 자바처럼.

자바에서는 이것이 완벽합니다. 수락하는 인수가 다른 여러 생성자가있는 경우 생성자에서 인수 관련 작업을 처리하고 모든 생성자가 모든 생성자에서 호출하는 메서드를 호출해야하는 공통 작업을 처리합니다.

개인적으로 필자는 mootools 클래스에서 이러한 구분을하지 않지만 다른 기능에서 코드를 재사용해야하는 경우 자체 기능에서 기능을 아웃소싱합니다.

설정 기능으로 혼동하지 마십시오. 숨겨진 기능이 없습니다.

1

setup은 개인 MooTools 방법이 아닙니다. 이 방법으로 명명 된 실제 메소드를 만들 때까지는 아무 것도하지 않을 것입니다.

MooTools에는이 메소드의 인스턴스가 하나 더 있으며, 이는 createDefaults() 또는 setInitialStuff()처럼 단순한 키워드를 뛰어 넘을 수 없습니다.

+0

'setup()'은 비공개 MooTools 메소드는 아니지만 많은 MooTools 개발자가이를 규칙으로 사용하는 것 같습니다. 이 패턴 뒤에있는 이점/추론을 이해하려고 노력하고 있습니다. –

+0

이점은 없습니다. 키워드 이상은 아닙니다. 개인적 취향으로'initialize' 안에서'initDefauts'를 사용합니다. 다른 개발자와 동일한 "컨벤션"을 사용하려면 보드에 뛰어 들어야합니다. –

2

oskar가 말한 것처럼, 그 이름을 사용하는 데는 아무런 이점이 없습니다. 원한다면 익명 함수와 이벤트가있는 단일 초기화 함수 만 사용할 수 있지만 읽기, 확장 및 유지 관리가 쉬운 코드는 아닙니다.

다른 동작을 추상화하려면 this.setupScene()this.attachEvents()과 같은 메서드를 사용하는 경향이 있습니다. 이러한 메서드 내에서 항목을 반복하고 단수 dom 조작이 필요한 작은 의사 개인 메서드를 호출하는 경향이 있습니다. this.elements.each(function(el) { this._attachEvent(el, "something"); }, this);

다른 사용자와 코드를 공유하는 경우 가장 많은 규칙이 있습니다 mootools 제작자는 플러그인을 공개하거나 코어 및 더 많은 포크에 기여할 때이를 고수하려고합니다. 잠시 후에 http://ryanflorence.com/11-tips-for-creating-great-mootools-plugins/ 또는 http://davidwalsh.name/mootools-class-tips

그들이 시작 : 클래스는 요소 또는 요소의 배열에 관한 경우

예를 들면, 항상 등

권장 사항에 참조

this.element = document.id(el); 세트 완벽한 감각을 만들고 당신의 일에서 대단히 도움이 될 것입니다.

0

MooTools 클래스는 기존 코드를 확장하고 재사용한다는 것을 명심하십시오. 클래스를 확장 할 때 초기화 코드는 변경할 수 있지만 설정 코드는 변경하지 않는 것이 좋습니다. 물론 this.parent()을 사용하여 상위 이니셜 라이저를 실행할 수 있지만 원하지 않는 부작용이 발생할 수 있습니다.

이 (매우 간단) 예 ( view live)을 가지고 :

var Counter = new Class({ 
    initialize: function(i){ 
     this.i = i; 
     this.setup(); 
    }, 

    setup: function(){ 
     new Element('p', { 
      'text': this.i 
     }).inject(document.body); 
    } 
}); 

var MultiplyCounter = new Class({ 
    Extends: Counter, 

    initialize: function(i){ 
     this.i = i * 2; 
     this.setup(); 
    } 
}); 

new Counter(5); 
new MultiplyCounter(5); 

확장 클래스는 i의 초기화, 클래스의 전체가 아니라 구현을 변경합니다. 좀 더 복잡한 클래스의 경우에는 더 빨리 (초기화는 한 번만 실행 됨) 코드와 클리너 (divide and conquer) 코드가 생성됩니다.