Giter Site home page Giter Site logo

Comments (5)

chrisveness avatar chrisveness commented on July 25, 2024

Extending Object, Array, or Function prototypes is absolutely a bad idea, even more so when done with quite general-purpose method names (Prototype ended up causing havoc with Function.prototype.bind()).

Not only can different librariesโ€™ extensions define different semantics for the same method, but such extensions can have knock-on effects (resulting for instance in the need for hasOwnProperty() workarounds).

Extending DOM objects is similarly ill advised (again, Prototypeโ€™s getElementsByClassName() is a classic example).

However, extending primitive objects with methods with obvious semantics is not the same. String.trim() was widely implemented, without issues, before finally being adopted into the language.

I donโ€™t think toRadians() and toDegrees() are sufficiently ubiquitous ever to make it into the language, but they have obvious unambiguous semantics, and I cannot see risks in having them as Number methods.

If you can highlight specific risks, I will reconsider, but otherwise I find toRadians() and toDegrees() usefully idiomatic.

from geodesy.

chrisveness avatar chrisveness commented on July 25, 2024

(Oh, and pad() will be replaced as soon as padStart() is supported by Chrome & Edge).

from geodesy.

jamiewinder avatar jamiewinder commented on July 25, 2024

I don't necessarily disagree. You're right that the usual arguments against prototype changes aren't valid (e.g. clashes with another implementation).

Conversely though, I'm not sure what they add in terms of expressiveness. A number is a number, not an angle. I wouldn't put a toMiles on there for example.

I think the best argument I have is that it makes what would be a contained library into something which leaks into the global context, albeit subtly and largely unobtrusively.

Your call though of course.

Great library by the way, it's a big help.

from geodesy.

chrisveness avatar chrisveness commented on July 25, 2024

Indeed, at the end of the day itโ€™s a judgement call, one which has occupied me a fair bit.

In a library with numbers regularly representing angles, they are either degrees or radians, nothing else (ignoring gradians, of course). Hence itโ€™s more analogous to String.toUpper() / String.toLower() than to Number.toMiles() (from what?).

Equally, the difference in expressiveness is not great. I prefer the โ€˜toโ€™ conversion method to the function call, but itโ€™s perhaps subjective and personal.

So the question is maybe whether users of the library would be inconvenienced by the leakage into the global context. I hope not, though if so, that might change my view.

Anyway, glad you appreciate the library!

from geodesy.

mightyiam avatar mightyiam commented on July 25, 2024

It's a ๐Ÿ™…โ€โ™‚๏ธ...

๐Ÿ˜†

But really.

from geodesy.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.