是否可以在 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/