Task

Demonstrate how to make the object respond (sensibly/usefully) to an invocation of a method on it that it does not support through its class definitions.

Note that this is not the same as just invoking a defined method whose name is given dynamically; the method named at the point of invocation must not be defined.

This task is intended only for object systems that use a dynamic dispatch mechanism without static checking.



Related task

   Send an unknown method call.


// Kotlin JS version 1.2.0 (Firefox 43)
 
class C {
    // this method prevents a TypeError being thrown if an unknown method is called
    fun __noSuchMethod__(id: String, args: Array<Any>) {
        println("Class C does not have a method called $id")
        if (args.size > 0) println("which takes arguments: ${args.asList()}")
    }
}
 
fun main(args: Array<String>) {
    val c: dynamic = C()  // 'dynamic' turns off compile time checks
    c.foo() // the compiler now allows this call even though foo() is undefined
}