2012-12-11 2 views
1

백본의 소스를 읽는 동안 나는 어떤 객체 지향을 궁금해했다. http://backbonejs.org/docs/backbone.html (검색 "this.parse (속성);")this.parse (attributes); 백본의 소스 코드에서

Backbone.Model = function(attributes, options) { 
var defaults; 
attributes || (attributes = {}); 
console.log('attributes : ', attributes); 
if (options && options.parse) { 
    //LOOK HERE 
    attributes = this.parse(attributes); 
} 
if (defaults = getValue(this, 'defaults')) { 
    attributes = _.extend({}, defaults, attributes); 
} 
if (options && options.collection) this.collection = options.collection; 
this.attributes = {}; 
this._escapedAttributes = {}; 
this.cid = _.uniqueId('c'); 
if (!this.set(attributes, {silent: true})) { 
    throw new Error("Can't create an invalid model"); 
} 
delete this._changed; 
this._previousAttributes = _.clone(this.attributes); 
this.initialize.apply(this, arguments); 

};

프로토 타입에 구문 분석을 어떻게 사용할 수 있습니까? 방법이 _.extend 나중에 정의 (Backbone.Model.prototype, Backbone.Events, {누군가에 의해

new Backbone.Model 

을하고 때 실행되는 것입니다 기능에서 볼

+0

표현식은 실제로 실행될 때까지 평가되지 않습니다. 함수 내에서 함수가 처음 정의 될 때 평가되지 않고 실행될 때만 평가됩니다. 간단한 예 : http://jsfiddle.net/tUyhL/2/ – McGarnagle

+0

모두에게 감사드립니다. 어쨌든이 메서드는 매개 변수를 반환하기 만하기 때문에이 메서드는 재정의해야합니다. parse : function (resp, xhr) {return resp; }, – Olivvv

답변

1

코드 그 시간은 Backbone.Model.prototype도 정의됩니다. 그래서 재산 조회 (thisBackbone.Model의 방금 만든 인스턴스를 가리키는 것) this.constructor.prototypeparse 방법을 찾을 수 있습니다.

2

방법은 나중에에 프로토 타입에 추가하더라도 출처 코드를 사용하면 생성자 함수에서 실제로 Backbone.Model을 만들 때 나머지 프로토 타입과 함께 사용할 수 있습니다.

관련 문제