当前位置:首页 > 开发 > Web前端 > 前端 > 正文

dojo生命周期管理

发表于: 2012-11-20   作者:netliving   来源:转载   浏览次数:
摘要: 今天简单看了一下dojo的declare源代码,发现了实例化化的代码,才真正理解了生命周期的原理,以前从网上只是看到了生命周期的几个方法,如果组织的一直没有发现,今天终于发现了。 declare他主要是dojo的继承机制,由于dojo支持多继承方式,所以dojo采用了C3算法,将多个继承关系转换为单继承链,然后满足继承要求。同时在继承的时候 ctor.prototype = proto
今天简单看了一下dojo的declare源代码,发现了实例化化的代码,才真正理解了生命周期的原理,以前从网上只是看到了生命周期的几个方法,如果组织的一直没有发现,今天终于发现了。
declare他主要是dojo的继承机制,由于dojo支持多继承方式,所以dojo采用了C3算法,将多个继承关系转换为单继承链,然后满足继承要求。同时在继承的时候
ctor.prototype = proto;
proto.constructor = ctor;

其中ctor为返回的对象,也就是说他会自动执行自身的constructor方法,完成对象的构建,构建完成在以后,执行对象本身,本身的代码如下定义
bases[0] = ctor = (chains && chains.constructor === "manual") ? simpleConstructor(bases) :
			(bases.length == 1 ? singleConstructor(props.constructor, t) : chainedConstructor(bases, t));


其中多继承方式的构造如下定义
	// chained constructor compatible with the legacy declare()
	function chainedConstructor(bases, ctorSpecial){
		return function(){
			var a = arguments, args = a, a0 = a[0], f, i, m,
				l = bases.length, preArgs;

			if(!(this instanceof a.callee)){
				// not called via new, so force it
				return applyNew(a);
			}

			//this._inherited = {};
			// perform the shaman's rituals of the original declare()
			// 1) call two types of the preamble
			if(ctorSpecial && (a0 && a0.preamble || this.preamble)){
				// full blown ritual
				preArgs = new Array(bases.length);
				// prepare parameters
				preArgs[0] = a;
				for(i = 0;;){
					// process the preamble of the 1st argument
					a0 = a[0];
					if(a0){
						f = a0.preamble;
						if(f){
							a = f.apply(this, a) || a;
						}
					}
					// process the preamble of this class
					f = bases[i].prototype;
					f = f.hasOwnProperty("preamble") && f.preamble;
					if(f){
						a = f.apply(this, a) || a;
					}
					// one peculiarity of the preamble:
					// it is called if it is not needed,
					// e.g., there is no constructor to call
					// let's watch for the last constructor
					// (see ticket #9795)
					if(++i == l){
						break;
					}
					preArgs[i] = a;
				}
			}
			// 2) call all non-trivial constructors using prepared arguments
			for(i = l - 1; i >= 0; --i){
				f = bases[i];
				m = f._meta;
				f = m ? m.ctor : f;
				if(f){
					f.apply(this, preArgs ? preArgs[i] : a);
				}
			}
			// 3) continue the original ritual: call the postscript
			f = this.postscript;
			if(f){
				f.apply(this, args);
			}
		};
	}


看到其中的注释1,2,3了吗,那就是他的实例化的过程,也就是可以扩展的定义步骤。

dojo生命周期管理

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
理解dojo小部件对于开发dojo的widget至关重要,dojo在绘制过程中主要存在以下几个过程: constructor
有时候我们会写一个基类dojo小部件用以实现一些通用的功能,然后让其他小部件继承该widget,有时候
FYI:http://www.360doc.com/content/10/1012/14/3103730_60358932.shtml Dojo所开发的控件具有很强的
4 dojo
目前,企业内部的数据量正快速膨胀,客户端和服务器端之间交换的数据格式也是多种多样。由于 Web2.0
5 DOJO
用户可以基于名字搜索一个产品类型 当用户选择了一个产品,将显示一个带有分隔面板(split pane)的
首先,测试人员发现 BUG ,做好记录并上报至 BUG 数据库。接着,开发组长或经理确定该 BUG 是否有效
Tomcat 包含多个很多个组件, Tomcat 内部使用一个观察者模式来组织这些组件之间的关系,做到同时启
1 JPA状态转换图 要理解JPA的核心接口,这个图必须牢记。 分为4种状态: 1)New状态:未有id,未与Pe
1 JPA状态转换图 要理解JPA的核心接口,这个图必须牢记。 分为4种状态: 1)New状态:未有id,未与Pe
1 JPA状态转换图 要理解JPA的核心接口,这个图必须牢记。 分为4种状态: 1)New状态:未有id,未与Pe
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号