Javascript-对象全局中的make函数

Javascript-对象全局中的make函数,javascript,function,global,Javascript,Function,Global,假设我有一个对象obj,其函数f1,接受两个参数a和b。函数的调用如下所示: obj.f1(a,b); f1(a,b); 现在我想让f1无需调用obj即可访问,如下所示: obj.f1(a,b); f1(a,b); 这可能吗?如果是,我如何才能做到这一点 编辑:如果是,是否有一种方法可以使对象中的所有函数都是全局的,而不知道具体的函数?虽然这样做不是最好的方法,但您可以将属性添加到全局窗口对象中(如果在浏览器中运行此功能,如果您使用的是node,那么您可以参考全局-我在这里使用它,以便在

假设我有一个对象
obj
,其函数
f1
,接受两个参数
a
b
。函数的调用如下所示:

obj.f1(a,b);
f1(a,b);
现在我想让
f1
无需调用
obj
即可访问,如下所示:

obj.f1(a,b);
f1(a,b);
这可能吗?如果是,我如何才能做到这一点


编辑:如果是,是否有一种方法可以使对象中的所有函数都是全局的,而不知道具体的函数?

虽然这样做不是最好的方法,但您可以将属性添加到全局
窗口
对象中(如果在浏览器中运行此功能,如果您使用的是node,那么您可以参考
全局
-我在这里使用它,以便在两种环境中都能工作),然后调用这些功能,而无需前缀
obj
。将属性添加到
窗口
(即:globalThis)通常情况下,这不是一个好主意,因为您最终可能会覆盖窗口上预先存在的属性。话虽如此,下面是您可以采取的措施:

constobj={x:1,y:function(){
console.log(“你好”);
}}
Object.entries(obj.forEach)([key,val])=>{
if(val的类型==“函数”)
全局此[键]=val;
});

y();
虽然这不是最好的方法,但您可以将属性添加到全局
窗口
对象(如果在浏览器中运行此操作,如果您使用的是节点,那么您可以参考
全局
——我在这里使用,以便在两种环境中都可以使用),然后调用这些属性,而无需前缀
obj
。向
窗口
(即:globalThis)添加属性通常不是一个好主意,因为您可能最终会覆盖窗口上预先存在的属性。话虽如此,您可以这样做:

constobj={x:1,y:function(){
console.log(“你好”);
}}
Object.entries(obj.forEach)([key,val])=>{
if(val的类型==“函数”)
全局此[键]=val;
});
y();
您可以像这样更改对象的属性:

const someObject={
f1:(a,b)=>a+b,
f2:(a,b)=>a*b,
defaultParams:[1,1],
}
常量{f1,f2,defaultParams}=someObject;
console.log(f1(defaultParams[0],15)*f2(…defaultParams));
您可以像这样修改对象的属性:

const someObject={
f1:(a,b)=>a+b,
f2:(a,b)=>a*b,
defaultParams:[1,1],
}
常量{f1,f2,defaultParams}=someObject;

console.log(f1(defaultParams[0],15)*f2(…defaultParams));
这使用了两个“弃用”命令:
with
eval
:)


这使用了两个“弃用”命令:
with
eval
:)


const f1=obj.f1
,然后稍后使用
f1(a,b)
调用它?这是假设
f1
不依赖
这个
@NickParsons听起来不错。有没有一种方法可以在不知道具体函数的情况下使对象中的所有函数都是全局的?是和否。通常这不是一个好主意,我很好奇你为什么要这样做。。。这就是说,由于没有“真正的”全局,只有依赖于您的环境的
global
window
对象,所以您可以在对象上循环并将function类型的所有条目复制到
global
window
const f1=obj.f1
,然后使用
f1(a,b)
?这是假设
f1
不依赖
这个
@NickParsons听起来不错。有没有一种方法可以在不知道具体函数的情况下使对象中的所有函数都是全局的?是和否。通常这不是一个好主意,我很好奇你为什么要这样做。。。这就是说,由于没有“真正的”全局,只有依赖于您的环境的
global
window
对象,所以您可以在对象上循环并将function类型的所有条目复制到
global
window