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

7.3 crxOop.isClassImplementing

crxOop.isClassImplementing() can be used to check during run time whether a class implements a particular interface or not. If the first parameter is not a valid class definition object, or registered class name, or the second parameter is not a valid interface definition object, or registered interface name, crxOop.isClassImplementing will issue a fatal error.

JS (Tree)
crx_registerInterface("ExampleInterface1b",
{
});
crx_registerInterface("ExampleInterface1",
{
   INHERITS: ["ExampleInterface1b"]
});
crx_registerClass("ExampleClass1",
{
   IMPLEMENTS: ["ExampleInterface1"]
});

crx_registerClass("ExampleClass2",
{
   EXTENDS: "ExampleClass1"
});

crx_registerInterface("ExampleInterface3",
{
});
crx_registerClass("ExampleClass3",
{
   IMPLEMENTS: ["ExampleInterface3"],
   EXTENDS: "ExampleClass2"
});

console.log((crxOop.isClassImplementing("ExampleClass1", "ExampleInterface1") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass1", "ExampleInterface1b") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass1", "ExampleInterface3") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass2", "ExampleInterface1") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass3", "ExampleInterface3") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass3", "ExampleInterface1") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass3", "ExampleInterface1b") ? "true" : "false"));
true
true
false
true
true
true
true
JS (Verbose)
crx_registerInterface("ExampleInterface1b",
{
});
crx_registerInterface("ExampleInterface1",
{
   INHERITS: ["ExampleInterface1b"]
});
crx_registerClass("ExampleClass1",
{
   "VERBOSE": 1,
   "implements": ["ExampleInterface1"]
});

crx_registerClass("ExampleClass2",
{
   "VERBOSE": 1,
   "extends": "ExampleClass1"
});

crx_registerInterface("ExampleInterface3",
{
});
crx_registerClass("ExampleClass3",
{
   "VERBOSE": 1,
   "implements": ["ExampleInterface3"],
   "extends": "ExampleClass2"
});

console.log((crxOop.isClassImplementing("ExampleClass1", "ExampleInterface1") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass1", "ExampleInterface1b") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass1", "ExampleInterface3") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass2", "ExampleInterface1") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass3", "ExampleInterface3") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass3", "ExampleInterface1") ? "true" : "false"));
console.log((crxOop.isClassImplementing("ExampleClass3", "ExampleInterface1b") ? "true" : "false"));
true
true
false
true
true
true
true

Notice how crxOop.isClassImplementing continues to return true if not the class itself, but a class in its extension chain implements the interface.