[Laszlo-dev] init vs oninit vs super.init

Benjamin Shine ben at laszlosystems.com
Tue Aug 7 11:45:35 PDT 2007


Bret and I were going through a code change and wanted a  
clarification on what order things were expected to happen:

<canvas>
<class name="cabbage">
	<method name="init">
		// called FIRST
		Debug.write("cabbage.init (method name=init) on %w", this);
		this.setAttribute("deliciousness", 0.35);
	</method>
	<handler name="oninit">
		// called SECOND
		Debug.write("cabbage.oninit (handler name=oninit) on %w", this);
	</handler>	
</class>

<class name="brusselssprout" extends="cabbage">	
	<method name="init">
		super.init(); // calls method name="init" on cabbage
		Debug.write("brusselssprout.oninit method on %w,  deliciousness is % 
f", this, this.deliciousness);
	</method>	
	<handler name="oninit">
		// called *after* cabbage's oninit handler
		Debug.write("brusselssprout.oninit handler on %w, deliciousness is % 
f", this, this.deliciousness);
	</handler>	
</class>

<cabbage id="cabby" />
<brusselssprout id="sprouty" />\
</canvas>

This produces the following output:
cabbage.init (method name=init) on #cabby
cabbage.oninit (handler name=oninit) on #cabby
cabbage.init (method name=init) on #sprouty
brusselssprout.oninit method on #sprouty,  deliciousness is 0.350000
cabbage.oninit (handler name=oninit) on #sprouty
brusselssprout.oninit handler on #sprouty, deliciousness is 0.350000


...which is just what I expect: superclass methods called before  
sublcass methods, method name="init" called before oninit handler.

Is this the guaranteed order of execution?

-ben


More information about the Laszlo-dev mailing list