rem: dojo.lang.setObjPathValue(className, ctor, null, true); 
add: var created = dojo.parseObjPath(className, null, true); created.obj[created.prop] = ctor; 
context: dojo.lang.declare = function(/*String*/ className, /*Function|Array*/ superclass, /*Function?*/ init, /*Object|Array*/ props){/* * summary: Create a feature-rich constructor with a compact notation * * className: the name of the constructor (loosely, a "class") * * superclass: may be a Function, or an Array of Functions.  *   If "superclass" is an array, the first element is used  *   as the prototypical ancestor and any following Functions  *   become mixin ancestors. * * init: an initializer function * * props: an object (or array of objects) whose properties are copied to the created prototype * * description: Create a constructor using a compact notation for inheritance and prototype extension. * *   "superclass" argument may be a Function, or an array of  *   Functions.  * *   If "superclass" is an array, the first element is used  *   as the prototypical ancestor and any following Functions  *   become mixin ancestors.  *  *   All "superclass(es)" must be Functions (not mere Objects). * *   Using mixin ancestors provides a type of multiple *   inheritance. Mixin ancestors prototypical  *   properties are copied to the subclass, and any  *   inializater/constructor is invoked.  * *   Properties of object "props" are copied to the constructor  *   prototype. If "props" is an array, properties of each *   object in the array are copied to the constructor prototype. * *   name of the class ("className" argument) is stored in  *   "declaredClass" property *  *   Initializer functions are called when an object  *   is instantiated from this constructor. *  * Aliased as "dojo.declare" * * Usage: * * dojo.declare("my.classes.bar", my.classes.foo, *	function() { *		// initialization function *		this.myComplicatedObject = new ReallyComplicatedObject();  *	},{ *	someValue: 2, *	someMethod: function() {  *		doStuff();  *	} * }); * */	if((dojo.lang.isFunction(props))||((!props)&&(!dojo.lang.isFunction(init)))){ 	 // parameter juggling to support omitting init param (also allows reordering init and props arguments)		var temp = props;		props = init;		init = temp;	}		var mixins = [ ];	if(dojo.lang.isArray(superclass)){		mixins = superclass;		superclass = mixins.shift();	}	if(!init){		init = dojo.evalObjPath(className, false);		if((init)&&(!dojo.lang.isFunction(init))){ init = null };	}	var ctor = dojo.lang.declare._makeConstructor();	var scp = (superclass ? superclass.prototype : null);	if(scp){		scp.prototyping = true;		ctor.prototype = new superclass();		scp.prototyping = false; 	}	ctor.superclass = scp;	ctor.mixins = mixins;	for(var i=0,l=mixins.length; i<l; i++){		dojo.lang.extend(ctor, mixins[i].prototype);	}	ctor.prototype.initializer = null;	ctor.prototype.declaredClass = className;	if(dojo.lang.isArray(props)){		dojo.lang.extend.apply(dojo.lang, [ctor].concat(props));	}else{		dojo.lang.extend(ctor, (props)||{});	}	dojo.lang.extend(ctor, dojo.lang.declare._common);	ctor.prototype.constructor = ctor;	ctor.prototype.initializer = (ctor.prototype.initializer)||(init)||(function(){});	dojo.lang.setObjPathValue(className, ctor, null, true);	return ctor; // Function}
meta: 4707	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/4707/50c3492c4c3c825dbd3401e134a19ed46799c456/declare.js/clean/www/resources/dojo-ajax/src/lang/declare.js