> 1. every call to `new Foo(...args)` creates a distinct object not
reference-equal to any other such call.

Would this mean

```
function factory() { return []; }
```

would qualify as a constructor?

On Fri, Jan 20, 2017 at 5:29 PM, Scott Sauyet <[email protected]> wrote:

> Bradley Meck wrote:
> > I am unsure the exact question.
>
> I certainly agree that it's not a well-formulated question.  Perhaps
> in the end it's not even coherent.  But it seems to make some sense.
> I suspect that the answer is simply that it cannot be done.  But I
> don't know how to demonstrate that.
>
>
> > `new` will allocate an object with a prototype for sure, but it is never
> > guaranteed to return that object even with classes.
> >
> > ```js
> > let a = {};
> > class Foo {
> >   constructor() {
> >     return a;
> >   }
> > }
> > const g = new Foo();
> > console.log(new Foo() === g);
> > ```
>
> Which demonstrates that `Foo` by such a criterion is not a reasonable
> constructor function.  I think that makes sense.  It clearly isn't
> one.
>
> > If the question is "How can an external observer know if a constructor
> > returns `this` vs some other object?" the answer is, you cannot.
>
> No, I don't think that's the central point.  But perhaps the examples
> above do capture something fundamental.  Even if we cannot prove it
> about an arbitrary function, that seems like a minimal criteria for a
> function to be a reasonable constructor:
>
> > A function, `Foo` can be used as a constructor function if
> >   1. every call to `new Foo(...args)` creates a distinct object not
> reference-equal to any other such call.
> >   2. ??
>
> Does that make sense?  Are there other important criteria?
>
> Of course this doesn't help us answer whether a particular function
> actually meets these criteria, but it's a start.
>
>   -- Scott
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to