konsoletyper
10/31/2016, 8:57 AMfun KClass<*>.defineCustomElement(parent: KClass<out HTMLElement>, tagName: String) {
fun JsClass<*>.create() = js("Object").create(this)
fun getPropertyNames(obj: dynamic): Array<String> = js("Object").getOwnPropertyNames(obj)
fun getOwnPropertyDescriptor(obj: dynamic, name: String): dynamic = js("Object").getOwnPropertyDescriptor(obj, name)
fun defineProperty(obj: dynamic, name: String, descriptor: dynamic) = js("Object").defineProperty(obj, name, descriptor)
fun copyProperties(from: dynamic, to: dynamic) {
for (propertyName in getPropertyNames(from)) {
val descriptor = getOwnPropertyDescriptor(from, propertyName)
defineProperty(to, propertyName, descriptor)
}
}
val newProto = parent.js.create()
val oldProto = this.js.asDynamic().prototype
copyProperties(oldProto, newProto)
this.js.asDynamic().prototype = newProto
js("customElements").define(tagName, this.js)
}