ES4 draft: Function

Garrett Smith dhtmlkitchen at gmail.com
Thu Mar 13 10:59:29 PDT 2008


Hi Dustin,

Well it does, apparently it was called the "splat" operator, which (to
me) sounds a better than "spread". I think it works like:-

var args = [12, true];
new C(...args);

function C( count, isSemiAnnual) {

}

- Maybe one of guys writing the specs can comment on that.


It can be hacked in ES3:-

    /**
     * @param {Function} fun constructor to be invoked.
     * @param {Array} args arguments to pass to the constructor.
     * Instantiates a constructor and uses apply().
     */
    newApply : function(fun, args) {
        if(arguments.length === 0) return;
        var f = arguments.callee, i;

        f.prototype = fun.prototype;// Copy prototype.
        f.prototype.constructor = fun;

        i = new f;
        fun.apply(i, args); // Apply the original constructor.
        return i;
    },

- from http://dhtmlkitchen.com/ape/build/APE.js

Garrett

On Thu, Mar 13, 2008 at 10:48 AM, Dominic Cooney
<dominic.cooney at gmail.com> wrote:
> Why doesn't Function have something like apply that does the same as
>  in a new expression, i.e. allocate-init-and-apply? To put it another
>  way: given arguments in an array, I want to write:
>
>  F.thisThing(args) and have it mean the same as new F(args[0], args[1],
>  ... args[n-1])
>
>  Or is what happens behind the veil of object creation detailed enough
>  that I can write a facsimile of it with apply? I guess something like:
>
>  var x = {};
>  x.prototype = F.prototype;
>  x = F.apply(x, args) || x;
>
>  But why force me to guess? No doubt I am wrong.
>
>  Dominic
>
>
>
>  On Mon, Mar 10, 2008 at 7:38 PM, Jon Zeppieri <jaz at bu.edu> wrote:
>  > On 3/10/08, Lars Hansen <lhansen at adobe.com> wrote:
>  >  > First draft of the spec for the Function class.  Please comment.
>  >  >
>  >
>  >  Suggestion: deprecate the Function constructor and static invoke().
>  >
>  >  Almost all of its uses are better handled by function expressions and,
>  >  in those cases where eval() in required, one can use eval().
>  >
>  >  -Jon
>  >
>  >
>  > _______________________________________________
>  >  Es4-discuss mailing list
>  >  Es4-discuss at mozilla.org
>  >  https://mail.mozilla.org/listinfo/es4-discuss
>  >
>  _______________________________________________
>  Es4-discuss mailing list
>  Es4-discuss at mozilla.org
>  https://mail.mozilla.org/listinfo/es4-discuss
>



More information about the Es4-discuss mailing list