On 05.06.2011 22:00, Peter Michaux wrote:
ES has "new Constructor()" as its basic syntax for construction. This
means that if other constructors are also beneficial that the syntax
to call them is inconsistent. For example, ES3 had the
"String.fromCharCode" and ES5 added "Object.create".

This is a basic idea of class-factory-methods, i.e. when an instance is created not directly by specified arguments, but with prior actions applied on the different kind of argument(s) passed to the factory. That is (pseudo-code):

class Point
  new: (x, y) ->
    this.x = x
    this.y = y
end

Point.fromString(s) = ->
  Point.new(...s.split(":"))
end

a = Point.new(1, 2)
b = Point.fromString("1:2")

and this kind of methods are placed on constructors (the main idea which I'm saying, is that `String.fromCharCode` isn't here because of inconsistency, but because of it's such a class-method, which is constructor of an instance).

  These are both
constructors of sorts. Would it be possible to add "String.new" etc so
that construction is consistent?


Sure, I also used such a notation with `.new` in my experiments. BTW, this is the approach used in Ruby too -- `new` is just (class-) method there.

Unfortunately Date.now, Date.parse, Date.UTC don't return Date objects
as they would be elegant cases of being other constructors.

Yes in order to get consistent syntax, host objects would need to
implement the static "new" method.


It can be done with a simple library though -- just wrappers for all kind of cases.

(I remember the idea of being able to write "String.new" rather than
having to write "String['new']" was discussed in the past. I don't
know if keywords as bare object keys are allowed in ECMAScript but it
seems to work in Firefox.)


Yes, it's possible per ES5.

Dmitry.
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to