这篇文章给大家介绍怎么在JavaScript项目中中调用芬兰湾的科特林方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
<强>用独立的JavaScript隔离声明强>
为了防止损坏全局对象,芬兰湾的科特林创建一个包含当前模块中所有芬兰湾的科特林声明的对象,所以如果你把模块命名为myModule里,那么所有的声明都可以通过myModule里对象在JavaScript中可用例。如:
fun foo (),=,“Hello"
可以在JavaScript中这样调用:
警报(myModule.foo ());
这不适用于当你将芬兰湾的科特林模块编译为JavaScript模块时(关于这点的详细信息请参见JavaScript模块)。在这种情况下,不会有一个包装对象,而是将声明作为相应类型的JavaScript模块对外暴露,例如,对于CommonJS的场景,你应该写:
警报(要求(& # 39;myModule里# 39;). foo ());
<强>包结构强>
芬兰湾的科特林将其包结构暴露给JavaScript,因此除非你在根包中定义声明,否则必须在JavaScript中使用完整限定的名称,例如:
package my.qualified.packagename fun foo (),=,“Hello"
可以在JavaScript中这样调用:
警报(myModule.my.qualified.packagename.foo ());
<强> @JsName注解强>
在某些情况下(例如为了支持重载),芬兰湾的科特林编译器会修饰(损坏)JavaScript代码中生成的函数和属性的名称。要控制生成的名称,可以使用@JsName注解:
//,模块“kj” 名称:class 人(val 字符串),{ fun 才能;hello (), { ,,,println (“Hello 美元名字!“) ,,} @JsName才能(“helloWithGreeting") fun 才能;你好(问候:字符串),{ ,,,println (“greeting 美元美元的名字!“) ,,} }
,现在,你可以通过以下方式在JavaScript中使用这个类:
var person =, new kjs.Person (“Dmitry");,,//,引用到模块“kj” person.hello(),,,,,,,,,,,,,,//,输出“Hello 德米特里!” person.helloWithGreeting (“Servus");,,,//,输出“Servus 德米特里?!"
如果我们没有指定@JsName注解,相应函数的名称会包含从函数签名计算而来的后缀,例如hello_61zpoe美元。
请注意,芬兰湾的科特林编译器不会对外部声明应用这种修饰,因此你不必在其上使用@JsName。值得注意的另一个例子是从外部类继承的非外部类。在这种情况下,任何被覆盖的函数也不会被修饰。
@JsName的参数需要是一个常量字符串字面值,该字面值是一个有效的标识符。任何尝试将非标识符字符串传递给@JsName时,编译器都会报错。以下示例会产生编译期错误:
@JsName (“new  C()“),,//,此处出的错 external fun  newC ()
<强>在JavaScript中表示芬兰湾的科特林类型强>
- <李>
除了芬兰湾的科特林。长期的芬兰湾的科特林数字类型映射到JavaScript号码。
李> <李>芬兰湾的科特林。Char映射到JavaScript数量来表示字符代码。
李> <李>芬兰湾的科特林在运行时无法区分数字类型(芬兰湾的科特林。长除外),即以下代码能够工作:
李>fun f (), { val 才能;x: Int =, 23岁 val 才能;y: Any =, x println才能(y as 浮动) }
- <李>
芬兰湾的科特林保留了芬兰湾的科特林。Int,芬兰湾的科特林。字节,芬兰湾的科特林。短,芬兰湾的科特林。Char和芬兰湾的科特林。长时间的溢出语义。
李> <李>JavaScript中没有64位整数,所以芬兰湾的科特林。长时间没有映射到任何JavaScript对象,它是由一个芬兰湾的科特林类模拟的。
李> <李>芬兰湾的科特林。字符串映射到JavaScript字符串。
李> <李>芬兰湾的科特林。任何映射到JavaScript对象(即新对象(){}等)。
李> <李>芬兰湾的科特林。数组映射到JavaScript数组。
李> <李>芬兰湾的科特林集合(即列表、设置、地图等)没有映射到任何特定的JavaScript类型。
李> <李>芬兰湾的科特林。Throwable映射到JavaScript错误。
李> <李>芬兰湾的科特林在JavaScript中保留了惰性对象初始化。
李> <李>芬兰湾的科特林不会在JavaScript中实现顶层属性的惰性初始化。
李>