Openerp js 코드 분석 계승 부분

6300 단어
openerp js 코드 가 정교 하고 모든 조작, 데이터 요청 은 js 를 통 해 이 루어 집 니 다.js 에 서 는 대상 을 대상 으로 하 는 사 고 를 충분히 활용 하여 계승 하 는 것 이 비교적 많다.코드 를 분 석 했 습 니 다. root object 류 corelib. js instance. web. class 류 는 모든 계승 관 계 를 사용 하 는 부모 클래스 에 해당 하 며 계승 관 계 는 이 클래스 에서 이 루어 집 니 다.예 를 들 어 instance. web. FormView = instance. web. View. extend (instance. web. form. FieldManager Mixin, {}) formview 는 extend 의 계승 instance. web. View 를 호출 합 니 다. 이러한 종류의 계승 관 계 는 다음 과 같 습 니 다. instance.web.FormView–>instance.web.View->instance.web.Widget–>instance.web.Controller–>instance.web.Class Events–>instance.web.Class instance.web.Registry–>instance.web.Class instance.web.JsonRPC–>instance.web.Class instance.web.CrashManager–>instance.web.Class instance.web.Bus–>instance.web.Class instance.web.TranslationDataBase– > instance. web. class 에는 instance. web. class 를 계승 하 는 종류 가 많 습 니 다. 코드 를 찾 아 보 세 요.corelib. js 참조
instance.web.Class.extend = function() { var _super = this.prototype; var args = _.toArray(arguments); //        args.unshift({}); var prop = _.extend.apply(_,args); //  underscore  ,    args      prop   。 initializing = true; var prototype = new this(); //          ,     。 initializing = false; for (var name in prop) { //  args     ,  ,        ,    this._super    prototype[name] = typeof prop[name] == "function" && fnTest.test(prop[name]) ? (function(name, fn) { return function() { var tmp = this._super; this._super = _super[name]; var ret = fn.apply(this, arguments); this._super = tmp; return ret; }; })(name, prop[name]) : prop[name]; }

다음, Class. prototype = prototype;이렇게 해서 대상 상속 을 마 쳤 다.
function Class() { if (!initializing && this.init) { var ret = this.init.apply(this, arguments); if (ret) { return ret; } } } Class.constructor = Class;

이 안에서 클래스 의 구조 함 수 를 실현 했다. 이 게임 은 실제 적 으로 계승 할 수 없 지만 그 는 init 함 수 를 호출 하여 그 효과 에 도달 하면 init 함수 도 하위 클래스 의 구조 함수 의 작업 을 충당 할 수 있다.코드 예:
var Person = instance.web.Class.extend({ init: function(isDancing){ this.dancing = isDancing; }, dance: function(){ return this.dancing; } });

openerp 에 있 는 js 가 backbone. js 의 기능 을 많이 모방 한 것 같 습 니 다. 또한 'underscore' 를 많이 사 용 했 고 '$. Deferred () 대상' 도 많이 사 용 했 습 니 다. 이 건 참고 하 셔 야 합 니 다.
http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html
사실 이 코드 도 복잡 하지 않 아 요.

좋은 웹페이지 즐겨찾기