2011-12-27 2 views
4

사람들은 여러 가지면에서 Backbone.View을 사용하며 혼란 스럽습니다. 나는 보았다 :Backbone.View 이해

처음 세
Backbone.View.extend({}); 
new Backbone.View.extend({}); 
new Backbone.View(); 
new Backbone.View; 

다른이다. 마지막 두 가지는 동일합니다. (바이올린은 here을 참조하십시오.) 각각의 경우에 무슨 일이 일어나고 있습니까?

답변

2

모두 똑같습니다.

Backbone.View.extend({})을 사용하여 수업을 종료하면 알 수 있듯이 수업에 추가 속성이나 메서드가 추가되지 않습니다. 빈 해시 {}을 인수로 전달 중입니다. 따라서 Backbone.ViewBackbone.View.extend({})은 거의 똑같습니다.

키워드 존재에 관해서 전에, 그것은 단지 새로운 클래스를 instanciate. new 키워드를 사용하지 않으면 클래스에 대해 이야기하는 반면, new 키워드로는이 매우 동일한 클래스의 개체에 대해 이야기하고있는 것입니다.

육아는 의무 사항이 아닙니다. 생성자에 인수를 전달하려는 경우에만 필요합니다. new Backbone.View()new Backbone.View;은 앞에서 설명한 이유 때문에 new Backbone.View()new Backbone.View.extend({})과 동일합니다. 이 바이올린 (http://jsfiddle.net/C2Z34/)에 대해

:

  • myView1보기를 확장하는 클래스입니다
  • myView2는 (내 바이올린과 같이 parentesis 포함)의 목적은 Backbone.View의 클래스 확장.
  • myView3은 Backbone.View 클래스의 객체입니다. 그것은 연장되지 않습니다.
  • myView4 동일한
  • myView3 같은
+0

'Backbone.View'와'Backbone.View.extend()'는 * different *입니다. [this Fiddle] (http://jsfiddle.net/C2Z34/1/)을 참조하십시오. – Randomblue

+1

(피델 예제를 실행할 수 없기 때문에 Chrome 콘솔을 사용했습니다) @ gustavotkg가 여전히 적합합니다. 콘솔은 처음 세 가지가 다르다는 것을 알려줍니다. 그러나'Backbone.View'와'Backbone.View.extend()'도 비슷합니다. 'new backbone.View'와'new (Backbone.View.extend())를 사용하면'Backbone.View.extend()'가 반환하는 함수를 우회하는 것으로 간주하지만 View 생성자를 호출하고 유사한 객체를 반환합니다. [상속 , 라인 1096]. 'new Backbone.View.extend()', 대괄호가 빠져 있음을 알 수 있습니다. 다소 JSWTF입니다. 나는 그것을'new (Backbone.View.extend()) '라고 부르기를 기대하지만 그렇게하지는 않는다. – Wieczo

+0

@wieczo : 고마워요. 대괄호에 대한 귀하의 의견은 매우 유용합니다. 나는 그것에 대해 혼란스러워했다. – Randomblue

-1

확장 서브 클래스를 생성한다. 예제에서 뷰 클래스는 원래 백본 뷰와 똑같이 동작하도록 사용자 지정 코드를 추가하지 않습니다. new 키워드를 사용하면 뷰의 인스턴스를 반환하는 클래스의 생성자 함수를 호출 할 수 있습니다. 보기에서 사용자 정의 코드를 원한다면 예. render 함수를 사용하면 BB 뷰를 확장 할 수 있습니다. 그런 다음이보기를 사용하려면 확장보기의 새 인스턴스를 만듭니다.

+0

나는 혼란스러워. 'new Backbone.View.extend ({});는 인스턴스를 반환하지 않습니다. 함수를 반환합니다. – Randomblue

+0

이 문은 메서드 호출의 순서를 혼동시키기 때문일 수 있습니다.확장 클래스의 하나의 인스턴스 만 작성할 수 있으므로이 결합 된 명령문은 거의 필요하지 않습니다. 호출 : new (Backbone.View.extend ({}))는 예상대로 작동해야합니다. – ProTom

+0

메서드 호출 앞에 새 명령문이 있습니다. 예 : "new hello();" 함수 호출을 실행하지 않지만이 메소드를 new를 통해 생성 된 새 객체의 생성자 함수로 사용합니다. 따라서 확장 함수는 완전히 새로운 객체의 생성자 함수로 사용됩니다. JS 함수는 객체 (따라서 클래스)이기 때문에 JSWTF가 아니기 때문에 new를 호출하면 새로운 인스턴스를 생성하기 때문에 JSWTF가 아닙니다. – ProTom