Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
VJET/Typing Object Literals and Function References
JavaScript object literals provide a way to define and create new objects. They are frequently used to define data structures and lightweight class instances.
Object Literals and Function Refs are frequently used constructs in JavaScript; they can be assigned to variables and properties, returned by functions, and passed as arguments.
In this example Point is comprised of two int properties, Line is comprised of two Point properties and the function SimpleLine takes two Point arguments. We also define two function refs, createLine and isSingularity.
vjo.otype('Shape') .defs ({ Point: { x: undefined, //< Number y: undefined //< NumberNumber }, Line: { start: undefined, //< Shape.Point end: undefined //< Shape.Point }, //> public Shape.Line createLine(Shape::Point pt1, Shape::Point pt2) createLine : vjo.NEEDS_IMPL, //> public boolean isSingularity(Shape.Line line) isSingularity: vjo.NEEDS_IMPL }) .endType();
When you need to refer to an otype definition from another type you must:
Use the fully qualified name of the type, or use the _.needs_ Comment, which serves as a shortcut to the _otype_ namespace.
Do not include the _otype_ in a _.needs_ section; _otypes_ are not true types, but are used to provide a namespace for custom types.
The following example:
Uses the _needs_ Comment to create a shortcut for the _otype namespace_, _samples.Shape_.
Declares two _Point_ properties and a _Line_ property
Declares a function typed as _SimpleLine_
vjo.ctype('samples.ConstructShape') //> needs samples.Shape .protos({ point1 : {x:0, y:0}, //< Shape::Point point2 : {x:10, y:0}, //< Shape::Point line1 : undefined, //< Shape::Line //> public Shape.SimpleLine createLine() createLine : function(pt1, pt2) { this.line1 = {start: pt1, end: pt2} ; } }) .endType();