Kotlin 支持现有类型的扩展。比如我们can do this :
fun String.replaceSpaces(): String {
return this.replace(' ', '_')
}
val formatted = str.replaceSpaces()
但是在 JavaScript 中 this is an antipattern .
Kotlin 是否回避了这在 Javascript 中引起的问题?
最佳答案
不,这不是反模式。在 js 中,它是一种反模式,因为 js 是动态的,因此更改原型(prototype)会改变代码在运行时 的工作方式,使其成为一种反模式。根据 in 运算符的工作方式以及您可以重写所有内容 的事实,这也是极其危险的,因此更改原型(prototype)可能会影响页面上某处的代码:
Number.prototype.toString = function(){
return "bullshit";
};
alert(""+12);
在 kotlin 中情况并非如此,因为 kotlin 是静态的,并且所有引用都是在编译时 构建的。此外,您不能覆盖现有方法,因此它一点也不危险。
关于javascript - Kotlin 允许扩展现有类型是好事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46823118/