I would suggest to fix prototype reference and ensure that all objects that
are returned from constructor are taken into account be it functions or
anything else. Something across these lines:

function NEW(f) {
    var obj,
        out;
    if (Object.create) {
        obj = Object.create(f.prototype);
    } else {
        NEW.ff = NEW.ff || function () {};
        NEW.ff.prototype = f.prototype;
        obj = new NEW.ff;
    }
    out = f.apply(obj, Array.prototype.slice.call(arguments, 1));
    if (Object(out) === out) {
        return out;
    }
    return obj;
}


On 15 July 2011 22:12, Peter van der Zee <jsment...@qfox.nl> wrote:

> On Fri, Jul 15, 2011 at 1:38 PM, Xavier MONTILLET
> <xavierm02....@gmail.com> wrote:
> > Hi,
> >
> > I think you should je return whaterver is returned by the constructor.
>
> Nah, construtors always return an object. If you don't (ie. `return
> 5;`), the original new instance is returned anyways.
>
> I would suggest you use a blacklist for primitives with typeof though,
> since host objects and function do not (have to) return "object". And
> also check for null, since that returns "object" as well. For future
> proofing, also check if typeof returns "null", because that will be
> fixed later.
>
> Other than that, yeah looks fine. Important part is fixing the
> [[Prototype]] reference. Maybe you could create the new object with
> Object.create so that it works in all es5 compliant browsers? I
> wouldn't rely on __proto__ too much. Maybe try to fall back to
> __proto__ if Object.create does not exist.
>
> - peter
>
> --
> To view archived discussions from the original JSMentors Mailman list:
> http://www.mail-archive.com/jsmentors@jsmentors.com/
>
> To search via a non-Google archive, visit here:
> http://www.mail-archive.com/jsmentors@googlegroups.com/
>
> To unsubscribe from this group, send email to
> jsmentors+unsubscr...@googlegroups.com
>



-- 
Best regards,
Dmitry Baranovskiy
http://dmitry.baranovskiy.com

-- 
To view archived discussions from the original JSMentors Mailman list: 
http://www.mail-archive.com/jsmentors@jsmentors.com/

To search via a non-Google archive, visit here: 
http://www.mail-archive.com/jsmentors@googlegroups.com/

To unsubscribe from this group, send email to
jsmentors+unsubscr...@googlegroups.com

Reply via email to