我想创建一个自动将每个“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]]})()
答案 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环境,您可能需要不同的东西。