CrxOop CrxOop: Bringing Object Oriented Programming, and Proper Prototype Based Programming, To Javascript
The aim of the library documented below is to provide developers with a solution to allow development using interfaces and classes as they are known in other object oriented programming (OOP) languages such as C++, C#, Java and PHP. Further more, V1.4 introduces structures, a generalization of the concept of prototypal inheritance, known here as POBP.
Subject
Body*
Email
SUBMIT CLOSE
Menu

5.4.2 Shared Public Instance Variables and Functions

Shared public structure members are equivilant to public class members in their access. However, unlike in classes where each class in the extension chain has its own copy of its non virtual members in an instance, structure instances contain one copy of each shared public member. The one last decalred in the inheritance chain. Shared public structure members can be thought of as public 'virtual' class members, both functions and variables.

Example: Shared Public Access Members
JS (Tree)
crx_registerStructure("ExampleStructureA",
{
   SHARED:
   {
      PUBLIC:
      {
         VARS:
         {
            "sharedPublicVar": "I am ExampleStructureA::sharedPublicVar",
         },
         FUNCTIONS:
         {
            "sharedPublicFunction": function()
            {
               return "I am ExampleStructureA::sharedPublicFunction()";
            },
            "testFromExampleStructureA": function()
            {
               console.log(this.sharedPublicVar);
               console.log(this.sharedPublicFunction());
            }
         }
      }
   }
});
crx_registerStructure("ExampleStructureB",
{
   INHERITS: ["ExampleStructureA"],
   SHARED:
   {
      PUBLIC:
      {
         VARS:
         {
            "sharedPublicVar": "I am ExampleStructureB::sharedPublicVar",
         },
         FUNCTIONS:
         {
            "sharedPublicFunction": function()
            {
               return "I am ExampleStructureB::sharedPublicFunction()";
            },
            "testFromExampleStructureB": function()
            {
               console.log(this.sharedPublicVar);
               console.log(this.sharedPublicFunction());
            }
         }
      }
   }
});

var a = crx_new("ExampleStructureB");

console.log("From out side the instance functions");
console.log(a.sharedPublicVar);
console.log(a.sharedPublicFunction());
console.log("From inside ExampleStructureA function in an ExampleStructureB instance");
a.testFromExampleStructureA();
console.log("From inside ExampleStructureB function in an ExampleStructureB instance");
a.testFromExampleStructureB();
From out side the instance functions
I am ExampleStructureB::sharedPublicVar
I am ExampleStructureB::sharedPublicFunction()
From inside ExampleStructureA function in an ExampleStructureB instance
I am ExampleStructureB::sharedPublicVar
I am ExampleStructureB::sharedPublicFunction()
From inside ExampleStructureB function in an ExampleStructureB instance
I am ExampleStructureB::sharedPublicVar
I am ExampleStructureB::sharedPublicFunction()
JS (Verbose)
crx_registerStructure("ExampleStructureA",
{
   VERBOSE: 1,
   "shared public var sharedPublicVar": "I am ExampleStructureA::sharedPublicVar",
   "shared public function sharedPublicFunction": function()
   {
      return "I am ExampleStructureA::sharedPublicFunction()";
   },
   "shared public function testFromExampleStructureA": function()
   {
      console.log(this.sharedPublicVar);
      console.log(this.sharedPublicFunction());
   }
});
crx_registerStructure("ExampleStructureB",
{
   VERBOSE: 1,
   INHERITS: ["ExampleStructureA"],
   "shared public var sharedPublicVar": "I am ExampleStructureB::sharedPublicVar",
   "shared public function sharedPublicFunction": function()
   {
      return "I am ExampleStructureB::sharedPublicFunction()";
   },
   "shared public function testFromExampleStructureB": function()
   {
      console.log(this.sharedPublicVar);
      console.log(this.sharedPublicFunction());
   }
});

var a = crx_new("ExampleStructureB");

console.log("From out side the instance functions");
console.log(a.sharedPublicVar);
console.log(a.sharedPublicFunction());
console.log("From inside ExampleStructureA function in an ExampleStructureB instance");
a.testFromExampleStructureA();
console.log("From inside ExampleStructureB function in an ExampleStructureB instance");
a.testFromExampleStructureB();
From out side the instance functions
I am ExampleStructureB::sharedPublicVar
I am ExampleStructureB::sharedPublicFunction()
From inside ExampleStructureA function in an ExampleStructureB instance
I am ExampleStructureB::sharedPublicVar
I am ExampleStructureB::sharedPublicFunction()
From inside ExampleStructureB function in an ExampleStructureB instance
I am ExampleStructureB::sharedPublicVar
I am ExampleStructureB::sharedPublicFunction()