javascript - Kotlin 喜欢 JavaScript 中的作用域函数(让、也、应用、运行)?

标签 javascript typescript kotlin

是否可以在 Javascript/Typescript 中创建类似 Kotlin 的范围函数?有没有图书馆可以做到这一点?
引用:https://kotlinlang.org/docs/reference/scope-functions.html

最佳答案

不,你不能在 JavaScript 或 TypeScript 中做到这一点。但取决于你为什么要这样做,解构可能会有所帮助。
您可以获得的最接近的是使用已弃用的 with语句,它将一个对象添加到作用域链的顶部,因此任何独立的标识符引用都会根据对象的属性进行检查:

function example(o) {
    with (o) { // deprecated
        console.log(answer);
    }
}
const obj = {
    answer: 42
};
example(obj); // Outputs 42
with 有几个问题但是,这就是为什么它在 JavaScript 的严格变体中被禁止的原因(这是默认的内部模块、class 构造,以及在 ES2015+ 中创建的其他新范围,以及任何以 "use strict"; 开头的函数或脚本) .
另一个接近的版本是将对象传递给在其参数列表中使用解构的函数:

function example({answer}) {
    console.log(answer);
}
const obj = {
    answer: 42
};
example(obj); // Outputs 42

但是 一个主要的警告是,您不能以这种方式为属性分配新值(更糟糕的是,如果您尝试 - 例如,使用 answer = 67 - 它会更新参数的值而不是对象的属性值)。
为了解决这个问题,你可以在函数内部使用解构,const所以你不要忘记你不能更新值(或者如果你尝试会得到一个早期的错误):

function example(o) {
    const {answer} = o;
    console.log(answer);
    // answer = 67;   // <== Would cause error
    // o.answer = 67; // <== Would work
}
const obj = {
    answer: 42
};
example(obj); // Outputs 42

关于javascript - Kotlin 喜欢 JavaScript 中的作用域函数(让、也、应用、运行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65808250/

相关文章:

javascript - PhoneAttribute 的 MVC 客户端验证

javascript - 图例没有附加到 div 中,而是打印在 div 之外

javascript - 尝试在Compoundjs中定义 Assets 编译器并收到未定义的方法错误

angular - 具有不同属性名称的 typescript map 类型

javascript - TypeScript 从另一个项目/模块导入类?

sql - 如何使用 Kotlin 的暴露 ORM 获得具有正确行为的createdAt和lastModified字段?

java - 无法使用 IntelliJ 应用程序配置找到或加载主类

javascript - 如何从字符串中删除文本?

javascript - Angular2 FileSaver.js

android - 为什么在 View 模型中声明变量时使用下划线 kotlin 约定