Extending Number.prototype in javascript and the Math object?

后端 未结 8 1766
孤城傲影
孤城傲影 2021-02-05 03:11

I\'ve always wondered why Javascript has the global Math object instead of giving numbers their own methods. Is there a good reason for it?

Also are there any drawbacks

8条回答
  •  失恋的感觉
    2021-02-05 03:22

    The reason for the Math object is simple: "because Java does it". Not the best of reasons, but here we are. I guess things made more sense back then, before Douglas Crockford started his campaign to suppress half the language*. Originally you were "allowed", or meant, to do things like this:

    with (Math) {
      var n = min( round(a) * round(b), sqrt(c) );
      var result = exp( n + d );
    }
    

    The drawback to extending Number.prototype is that someone else might do the same thing. Or worse, for example, define Number.prototype.round as a symmetrical rounding function.

    If you are looking for ways to make your life easier, why stop there? Why not simply include Math functions as global functions?

    var m = 'abs acos asin atan atan2 ceil cos exp floor log max min ' +
            'pow random round sin sqrt tan PI').split(' ');
    for (var i=0,l=m.length; i

    This will drop all the math functions into the global scope, effectively allowing you to stop typing "Math." Ask yourself: Is there any real difference between extending Number and extending window with these functions?

    * Before you flame me: The Crockford comment is not meant to be taken too seriously. I do agree with him that with is very dangerous in an implicit global environment.

提交回复
热议问题