javascript - Kotlin 允许扩展现有类型是好事吗?

标签 javascript java kotlin

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/

相关文章:

javascript - Angular 类型错误: Cannot read property 'icon' of undefined

javascript - 如何在我的网页上仅运行一次间隔? (jquery)

java - JPanel 和 JFrame 坐标困惑

java - 数组中的随机数

android - 即使指定了 "match_parent",使用 ConstraintLayout 的 RecyclerView 项目也不会填满屏幕的整个宽度

kotlin - 减少嵌套循环的可能性

java - 为什么主构造函数主体在字段初始化之前执行?

javascript - 为什么提交表单会覆盖提交按钮单击处理程序中的设置 location.href?

Javascript:分配第二个可选参数而不分配第一个

java - 从 InputStream 读取最快的方法是什么?