<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
    <title></title>
  </head>
  <body text="#000000" bgcolor="#ffffff">
    Le 16/03/2011 09:11, Tom Van Cutsem a écrit :
    <blockquote
      cite="mid:AANLkTimLkiJ_3F7OBmy4yVFWM1NSQNH6RAunzeVcy2CK@mail.gmail.com"
      type="cite">Hi,
      <div><br>
      </div>
      <div>I have no objections to the use cases you're proposing, but
        in the interest of keeping the Proxy.createFunction method
        somewhat simple, why isn't the following sufficient:</div>
      <div><br>
      </div>
      <div>// [[Construct]]-less functions:</div>
      <div>var f = Proxy.createFunction(handler, callTrap, function() {
        throw "can't construct"; });</div>
      <div><br>
      </div>
      <div>// [[Call]]-less functions:</div>
      <div>var f = Proxy.createFunction(handler, function() { throw
        "can't call"; }, constructTrap);</div>
    </blockquote>
    It is sufficient, you are completely right :-)<br>
    And as noted by Brendan, it is actually indeed better that the user
    can customize the thrown message.<br>
    <br>
    <blockquote
      cite="mid:AANLkTimLkiJ_3F7OBmy4yVFWM1NSQNH6RAunzeVcy2CK@mail.gmail.com"
      type="cite">
      <div>Distinguishing between |null| and |undefined| to trigger one
        default behavior or the other feels a bit subtle to me. Are
        there precedents for this?</div>
      <div><br>
      </div>
      <div>As for the clarifying note on constructors: agreed. It
        doesn't hurt to be explicit about this.</div>
      <div><br>
      </div>
      <div>Cheers,</div>
      <div>Tom<br>
        <br>
        <div class="gmail_quote">2011/3/15 David Bruant <span dir="ltr"><<a
              moz-do-not-send="true"
              href="mailto:bruant@enseirb-matmeca.fr">bruant@enseirb-matmeca.fr</a>></span><br>
          <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
            0.8ex; border-left: 1px solid rgb(204, 204, 204);
            padding-left: 1ex;">
            <div text="#000000" bgcolor="#ffffff"> Le 15/03/2011 00:52,
              David Bruant a écrit :
              <div class="im">
                <blockquote type="cite"> <font size="-1">Hi,<br>
                    <br>
                    I've been thinking about Function proxy use cases
                    lately. Things that the spec do and that could be
                    convenient to emulate as well or just things that
                    could be useful.<br>
                    * [[Construct]]-less functions.<br>
                    All Array.prototype methods are like that as well as
                    all global object methods (parseInt...) as well as a
                    most of built-in methods. In some way, if you want
                    to define function which wouldn't make sense as
                    constructors (Math functions are a caricature of
                    that), [[Construct]]-less functions would be a good
                    way to raise error if someone, by accident, write
                    "new blabla()" or even "new blabla".<br>
                    It has been suggested here: <a
                      moz-do-not-send="true"
href="https://mail.mozilla.org/pipermail/es-discuss/2011-March/013019.html"
                      target="_blank">https://mail.mozilla.org/pipermail/es-discuss/2011-March/013019.html</a><br>
                    I think that it was a bit too hacky. I would suggest
                    more of a syntax like:<br>
                    var pf = Proxy.createFunction({}, myCall, null);</font><font
                    size="-1"><br>
                    <br>
                    * [[Call]]-less constructors<br>
                    Already possible through</font><font size="-1"> pf =
                    Proxy.createFunction({}, null, myConstructor);</font><br>
                </blockquote>
              </div>
              Spoke too quickly. This throws a TypeError both in
              proposal and FF4 implementation.<br>
              I would argue that this can be useful if I want to define
              "just a constructor". In most cases, people use function
              as functions or constructor, I have rarely seen both
              (except for Array or other built-in constructors which
              are, as said, built-in). [[Call]]-less functions would be
              a way to prevent what is intended to be a constructor to
              be called as a function.
              <div class="im"><br>
                <br>
                <blockquote type="cite"> <font size="-1"><br>
                    * "new A" behaves exactly like "A". This can be
                    found for Arrays for instance.<br>
                    Already possible through </font><font size="-1">pf
                    = Proxy.createFunction({}</font><font size="-1">,
                    myCall</font><font size="-1">, undefined);<br>
                    <br>
                    <br>
                    Finally, I'd like to add a note on constructors. On
                    the proposal is written: "If no constructTrap is
                    provided, new proxy(...args) is reified as calling
                    the proxy’s callTrap with |this| bound to a new
                    object delegating to proxy.prototype".<br>
                    In order to clarify, I think that instead of "</font><font
                    size="-1">proxy.prototype</font><font size="-1">" it
                    would be better to say "the result of calling the
                    get trap on the proxy with argument 'prototype'".
                    The get trap is the equivalent to</font><font
                    size="-1"> the [[Get]] internal method used in ES5.1
                    13.2.2</font><small> step 5. <font size="-1"><br>
                      Or maybe saying that the [[Construct]]</font></small><font
                    size="-1"> algorithm (13.2.2) will be used.<br>
                    <br>
                    David</font><br>
                </blockquote>
                <br>
              </div>
            </div>
            <br>
            _______________________________________________<br>
            es-discuss mailing list<br>
            <a moz-do-not-send="true"
              href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
            <a moz-do-not-send="true"
              href="https://mail.mozilla.org/listinfo/es-discuss"
              target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
            <br>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
    <br>
  </body>
</html>