是否可以在 Javascript/Typescript 中创建类似 Kotlin 的作用域函数?有没有图书馆可以做到这一点?
参考:https://kotlinlang.org/docs/reference/scope-functions.html https://kotlinlang.org/docs/reference/scope-functions.html
不,您不能在 JavaScript 或 TypeScript 中执行此操作。但取决于why当你尝试这样做时,解构会有所帮助。
您可以获得的最接近的是使用已弃用的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
but一个主要的警告是,您不能以这种方式为属性分配新值(更糟糕的是,如果您尝试 - 例如,使用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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)