2013-01-16 2 views
0

나는 응용 프로그램의 코드를 검토하고 있었다. 나는 내가 포괄적으로 이해할 수없는 다음의 코드를 가로 질러 갈 수있다.Backbone.js의 공유 메서드 및 속성?

define(['av'], function (av) { 
    av.Application.BaseView = function (options) { 
     //add non-shared methods/properties here --------------------- 1) 

    }; 
    _.extend(av.Application.BaseView.prototype, Backbone.View.prototype, { 
     // add shared methods/properties here ------------------------ 2) 
    }); 
    av.Application.BaseView.extend = Backbone.View.extend; 

}); 

수있는 방법/속성 주석 이후에 추가 왜 아무도 어떤 일이 비 공유하지 않습니다 및 주석 이후에는 2 자녀 인스턴스간에 공유된다?

+0

JavaScript의'prototype'에 익숙합니까? – Lukas

답변

2

첫 번째 코드 블록은 new보기를 시작할 때마다 호출되는 생성자 함수를 정의합니다.

this.foo = "bar"; 

이 초기화 코드는보기가 초기화 될 때마다 실행되며 뷰의 예를에 속성을 첨부 : 그 함수에서 당신은 구문을 사용하여 공용 속성을 만들 수 있습니다. 인스턴스 속성은 공유되지 않습니다.

두 번째 코드 블록은 먼저 모든 속성이 Backbone.View 인 생성자 함수의 프로토 타입을 확장 한 다음 블록에 정의 된 속성으로 확장합니다. 프로토 타입 속성은 함수의 모든 인스턴스 또는 원하는 경우 "클래스"간에 공유됩니다.

코드가 본질적으로하는 일은 새로운 기능을 만든 다음 Backbone.View의 속성으로 향상시키는 것입니다. Backbone.View 자신의 생성자 함수가 결코 호출되지 않기 때문에 (적어도 게시 한 코드에서는)이 클래스가 일반 Backbone View처럼 작동하지 않는다는 것을 의미합니다.

var view = new av.Application.BaseView({model:model}); 
console.log(view.model); //-> undefined 

백본 또한 클래스 정의에 constructor 속성을 설정하여보다 깨끗하게 생성자 함수를 재정 지원 : 그들은 평소처럼 예를 들어 생성자에 전달되는 model 또는 id 속성은 자동으로 인스턴스에 복사 할 수 없습니다 것 :

av.Application.BaseView = Backbone.View.extend({ 

    //override the constructor function 
    constructor: function(options) { 

     //this property is not shared between instances 
     this.foo = 'bar'; 

     //call Backbone's own constructor, so we get all the default behavior 
     Backbone.View.prototype.constructor.apply(this, arguments); 
    }, 

    //this property is attached to the prototype, and is shared 
    baz: 'qux' 
}); 
+0

귀하의 세부 답변을 통해 많은 도움을 주셔서 감사합니다. – touseefkhan4pk