crx_registerStructure("ExampleStructure1",
{
VERBOSE: 1,
"shared public function sharedPulicFunction": function(pA)
{
return ("ExampleStructure1::sharedPulicFunction with parameter " + pA);
},
"shared public function testFromExampleStructure1": function(pA)
{
// Calling ExampleStructure1::sharedPulicFunction or
// ExampleStructure1::sharedPrivateFunction
// will not work if an inheriting structure in the instance
// overrides the functions, like ExampleStructure3.
this.sharedPulicFunction(5);
this.sharedPrivateFunction(6);
// Instead we have to use 'SR'
this.SR("ExampleStructure1", "sharedPulicFunction", 5);
this.SR("ExampleStructure1", "sharedPrivateFunction", 6);
// The following would call
// ExampleStructure2::sharedPulicFunction
this.SR("ExampleStructure2", "sharedPulicFunction", 7);
// Printing the result of the above
console.log("TESTING FROM ExampleStructure1");
console.log(this.sharedPulicFunction(5));
console.log(this.sharedPrivateFunction(6));
console.log(this.SR("ExampleStructure1", "sharedPulicFunction", 5));
console.log(this.SR("ExampleStructure1", "sharedPrivateFunction", 6));
console.log(this.SR("ExampleStructure2", "sharedPulicFunction", 7));
},
"shared private function sharedPrivateFunction": function(pA)
{
return ("ExampleStructure1::sharedPrivateFunction with parameter " + pA);
}
});
crx_registerStructure("ExampleStructure2",
{
VERBOSE: 1,
"shared public function sharedPulicFunction": function(pA)
{
return ("ExampleStructure2::sharedPulicFunction with parameter " + pA);
},
"shared private function sharedPrivateFunction": function(pA)
{
return ("ExampleStructure2::sharedPrivateFunction with parameter " + pA);
}
});
crx_registerStructure("ExampleStructure3",
{
VERBOSE: 1,
"inherits": ["ExampleStructure1", "ExampleStructure2"],
"shared public function sharedPulicFunction": function(pA)
{
return ("ExampleStructure3::sharedPulicFunction with parameter " + pA);
},
"shared public function testFromExampleStructure3": function(pA)
{
this.sharedPulicFunction(8);
this.sharedPrivateFunction(9);
this.SR("ExampleStructure1", "sharedPulicFunction", 8);
this.SR("ExampleStructure1", "sharedPrivateFunction", 9);
this.SR("ExampleStructure2", "sharedPulicFunction", 8);
this.SR("ExampleStructure2", "sharedPrivateFunction", 9);
// Printing the result of the above
console.log("TESTING FROM ExampleStructure3");
console.log(this.sharedPulicFunction(8));
console.log(this.sharedPrivateFunction(9));
console.log(this.SR("ExampleStructure1", "sharedPulicFunction", 8));
console.log(this.SR("ExampleStructure1", "sharedPrivateFunction", 9));
console.log(this.SR("ExampleStructure2", "sharedPulicFunction", 8));
console.log(this.SR("ExampleStructure2", "sharedPrivateFunction", 9));
},
"shared private function sharedPrivateFunction": function(pA)
{
return ("ExampleStructure3::sharedPrivateFunction with parameter " + pA);
}
});
var instance = crx_new("ExampleStructure3");
instance.testFromExampleStructure1();
instance.testFromExampleStructure3();
//SR is also available on the instance
console.log("------------------");
console.log(instance.SR("ExampleStructure2", "sharedPulicFunction", 10));
TESTING FROM ExampleStructure1
ExampleStructure3::sharedPulicFunction with parameter 5
ExampleStructure3::sharedPrivateFunction with parameter 6
ExampleStructure1::sharedPulicFunction with parameter 5
ExampleStructure1::sharedPrivateFunction with parameter 6
ExampleStructure2::sharedPulicFunction with parameter 7
TESTING FROM ExampleStructure3
ExampleStructure3::sharedPulicFunction with parameter 8
ExampleStructure3::sharedPrivateFunction with parameter 9
ExampleStructure1::sharedPulicFunction with parameter 8
ExampleStructure1::sharedPrivateFunction with parameter 9
ExampleStructure2::sharedPulicFunction with parameter 8
ExampleStructure2::sharedPrivateFunction with parameter 9
------------------
ExampleStructure2::sharedPulicFunction with parameter 10