如何自动从对象全局变量?

时间:2012-03-27 22:35:21

标签: javascript math object global

我想创建一个自动将每个“Math”函数全局变为

的函数

示例:

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]]})()

2 个答案:

答案 0 :(得分:4)

实际上你可能认为你可以遍历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];
});

答案 1 :(得分:3)

喜欢这样

Object.getOwnPropertyNames(Math).forEach(function (p) {
    window[p] = Math[p];
});

alert(floor(4.5));
alert(sqrt(100));

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

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

A fiddle