Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

One reason is perhaps that the prototypal patterns has not been that well supported in JavaScript.

For example the use of constructor functions and the "new" operator parallels classes in traditional OO. A perhaps more "prototypal" approach would be to define instances by using object literal syntax. But the object literal syntax does not allow one to define the prototype, so it is more limited than using constructors.

One of the proposed extensions in the abandoned ECMAScript 4 proposal was to allow prototype definition in object literals, like:

  var obj = { x : 10, __proto__: protoobj };
This would make prototypal inheritance more natural, since you don't need the constructor as an intermediate step.

ECMAScript 5 has the method Object.create which creates a new instance with the given prototype:

    var obj = Object.create(protoobj, {x: 10});
But this is not yet widely supported, while "new" has been in the core since day one.

Basically the JavaScript language has been slow to fully embrace its prototypal nature.



True, the object instantiation syntax has been bizarre from the beginning. That's created a lot of confusion and workarounds.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: