# Begin:

The `Math`

object in JavaScript can prove to be extremely useful. In a page using the `Math`

object repeatedly, I would rather not continuously use. I would prefer to use these functions at top-level. I will provide an example on how this is possible:

### The With Keyword (Bad Way):

Let me state the following: This is absolutely terrible, never use it.

with(Math) {
let q = min(10,211);
let r = max(2,8);
let e = random();
let p = floor(e*r)
console.log(q*r/e)
}

### Bringing an Object to Front By Defining It As Such (Good Way):

I enjoy using this way much more than the way above.

let {min,max,random,floor} = Math;
let q = min(10,211);
let r = max(2,8);
let e = random();
let p = floor(e*r);
console.log(q*r/e);

# Continuation:

I am asking if anyone knows of a way to accomplish what the `with`

keyword does without `with`

because I find `with`

terrible. I am curious to know if it is possible to get all of the words of `Math`

and store it into an `Object`

that is defined as `Math`

. I understand that this may be confusing. Thank you for reading.

## Answer

For ordinary objects (instances of the `Object`

class) you could use `Object.assign`

to add their properties to the `window`

object. But for `Math`

and the other base objects their properties seem not to be enumerable. Instead, following this answer you can use `Object.getOwnPropertyNames`

to find all the properties of Math and attach them to the window object.

for (let prop of Object.getOwnPropertyNames(Math)) {
window[prop] = Math[prop];
}
console.log(PI); // 3.14...

I would suggest this is not a great practice as it is not very transparent about what names are being added to the global namespace.