Es gibt kein native
Schlüsselwort mehr, es gibt @native
Annotation. Momentan ist es eine funktionierende Lösung und Sie können sie mit dem 1.0.x-Zweig des Kotlin-Compilers verwenden. Wir werden diese Annotation jedoch zugunsten von extern
Annotationen ablehnen. Bereiten Sie sich daher darauf vor, Ihren Code eventuell für den Zweig 1.1.x neu zu schreiben.
Wenn Sie @native
Anmerkung auf eine Klasse setzen oder auf einem Top-Level-Funktion, passieren zwei Dinge:
- Sein Körper ist nicht zu JavaScript kompiliert.
- Compiler verweist direkt auf diese Klasse oder Funktion, ohne Paketname und Mangling.
Ich denke, es ist einfacher, indem Beispiel für eine JavaScript-Bibliothek zu erklären:
function A(x) {
this.x = x;
this.y = 0;
}
A.prototype.foo = function(z) {
return this.x + this.y + z;
}
function min(a, b) {
return a < b ? a : b;
}
und eine entsprechende Kotlin Erklärung
@native class A(val x: Int) {
var y: Int = noImpl
fun foo(z: Int): Int = noImpl
}
@native fun min(a: Int, b: Int): Int = noImpl
Beachten Sie, dass noImpl
eine spezielle Platzhalter, die wegen der erforderlich ist Nicht abstrakte Funktionen benötigte Körper und nicht abstrakte Eigenschaften erfordern Initialisierer. BTW, wenn wir @native
durch extern
ersetzen, werden wir dieses noImpl
loswerden.
Ein weiterer Aspekt der Zusammenarbeit mit JS-Bibliotheken ist die Einbindung von Bibliotheken über das Modulsystem. Entschuldigung, wir haben momentan keine Lösung (werden sie aber bald veröffentlichen). Siehe proposal. Sie können die folgende Problemumgehung für node.js/Commonjs verwenden:
@native interface ExternalModule {
fun foo(x: Int)
}
@native fun require(name: String): dynamic = noImpl
fun main(args: Array<String>) {
val module: ExternalModule = require("externalModule")
module.foo(123)
}
wo externes Modul wie diese
function foo(x) {
return x + 1;
}
module.exports = { foo : foo };
Orte, die gute Startpunkte für das Lesen sein könnten: https://discuss.kotlinlang.org/c/javascript, Kotlin Slack # Javascript-Kanal und diese andere SO Frage http://StackOverflow.com/Questions/36250680/ schreiben-javascript-applications-with-kotlin –