Hacker Newsnew | comments | show | ask | jobs | submit login

> Actually, I linked to a proposal by Brendan Eich, the creator of JavaScript.

Naming names doesn't change the idea: It is surely a wholesale change to function semantics in the language.

> JavaScript's open prototypes suffer from the inability to define a number of new properties at once using an object literal. reopen (not reopenClass), provides that functionality.

Sure, that's why you use a general-purpose merge function, prototypes just being objects themselves.

  var merge = function(o, o2, force) {
      for (var p in o2)
          if (o2.hasOwnProperty(p) && (!(p in o) || force))
              o[p] = o2[p];
      return o;

  var C = function() { /* ... */ };  
  merge(C.prototype, {
      foo: function() { /* ... */ },
      bar: function() { /* ... */ }
In any case a name like reopenClass() sounds very much like an attempt to make JS smell like Ruby even if all the function does is perform a merge.

  I can't take Katz' suggestions for JavaScript seriously.
  Naming names doesn't change the idea.
I’m confused! Are we judging ideas by the source or by their merits?


He named a name rather than challenge the suggestion ... I named a name to show that I am noticing a common quality in Katz' recent foray into JavaScript, that being his desire that it be like Ruby, the language for which he's best known.


That's not what happened. You started out with "I can't take Katz' suggestions for JavaScript seriously." and he pointed out that it wasn't his, but Brendan Eich's proposal.

To which you answered "Naming names doesn't change the idea."


For what it's worth, I've been writing JavaScript for longer than I've been writing Ruby, and have contributed rather extensively to JavaScript libraries over a number of years.


And when you look at the Ember source this is basically what reopen is doing.

But (!) writing

    foo: function() { /* ... */ },
    bar: function() { /* ... */ }
instead of

  /*window.*/merge(C.prototype, {
    foo: function() { /* ... */ },
    bar: function() { /* ... */ }
makes for easier reading, which is worth a lot in my opinion.

It's the same as Cocoa providing -[NSMutableArray removeLastObject] in addition to -[NSMutableArray removeObjectAtIndex:] and -[NSMutableArray length]

Sure you can express one with the other, but readability matters.


"""Naming names doesn't change the idea"""

Oh, but it does. First, it shows that you didn't understood what you read (re: who wrote the proposal).

Second, it shows that the thing that you deemed as unfit for the language is considered as fit by the VERY CREATOR of said language.

"""It is surely a wholesale change to function semantics in the language."""

So what, if it's needed?


Applications are open for YC Winter 2016

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact