如何从全局对象中自动生成变量

How can I automate making variables from an object global?

本文关键字:自动生成 变量 对象 全局      更新时间:2023-09-26

我想制作一个函数,自动将每个"数学"函数转换为全局

示例:

floor = Math.floor

这允许我这样做:

alert(floor(2.5))

上面的例子运行得很好(它提醒"2"),但我似乎找不到一种方法来为"Math"对象中的每个函数自动化这个过程。我上网想自己做点什么,但是。。。什么都不管用。

答案:

(function(a,b){for(b in a=Object.getOwnPropertyNames(Math))this[a[b]]=Math[a[b]]})()

实际上,您可能认为可以循环Math对象的所有属性,并将任何函数转换为全局函数(通过复制其引用):

for( var prop in Math ) {
    if( typeof Math[ prop ] === 'function' ) {
        window[ prop ] = Math[ prop ];
    }
}

这会奏效的如果单词不在此处:)

我们可以发现Object.getOwnPropertyDescriptor:的问题

console.log( Object.getOwnPropertyDescriptor(Math, 'floor') );

并且正如我们所看到的,所有的methods都被设置为enmuerable false


编辑

实际上我忘了Object.getOwnPropertyNames。您确实可以使用该方法获得所有属性名称,如

Object.getOwnPropertyNames(Math).forEach(function(name) {
    if( typeof Math[name] === 'function' )
        window[name] = Math[name];
});

类似

Object.getOwnPropertyNames(Math).forEach(function (p) {
    window[p] = Math[p];
});
alert(floor(4.5));
alert(sqrt(100));

getOwnPropertyNames给出对象中的所有属性,而不仅仅是可枚举的属性。

这在浏览器中起作用,其中全局对象称为window。对于其他JS环境,您可能需要一些不同的东西。

小提琴