Your mileage may vary, but for me it is, on contrary, intuitive that a subclass inherits by default all the methods of its superclass, without arbitrary exceptions such as `[Symbol.hasInstance]()`.
Whether it is desirable, I am sure it depends on what you put in the `[Symbol.hasInstance]()` method. But the situation for that particular method is the same as for any random method: a superclass must be careful if it wants to be subclass-friendly. —Claude > Le 16 août 2016 à 03:48, /#!/JoePea <[email protected]> a écrit : > > I want to add also that using `super` makes it more readable, but still > requires boilerplate code, and is just as statically limited as using a > direct reference to a constructor ([I wish it > wasn't](https://esdiscuss.org/topic/the-super-keyword-doesnt-work-as-it-should) > <https://esdiscuss.org/topic/the-super-keyword-doesnt-work-as-it-should)>): > > ```js > class A { > static [Symbol.hasInstance](obj) { > if (this === A) return false > else return super[Symbol.hasInstance](obj) > } > } > ``` > > /#!/JoePea > > On Mon, Aug 15, 2016 at 6:45 PM, /#!/JoePea <[email protected] > <mailto:[email protected]>> wrote: > It seems like using [[Get]] for looking up `@@hasInstance` can be confusing > and requires devs to write extra code. For example, suppose we have the > following code: > > ```js > class A { > static [Symbol.hasInstance] (obj) { > return false > } > } > > class B extends A {} > class C extends B {} > > let c = new C > > console.log(c instanceof B) // false, but expected true! > console.log(c instanceof A) // false, as expected > ``` > > The `c instanceof B` check (arguably unintuitively) fails. Defining a > `Symbol.hasInstance` method on a base class causes `instanceof` checks on any > subclasses to automatically fail unless the developer takes care to write an > ugly and fragile workaround: > > ```js > class A { > static [Symbol.hasInstance](obj) { > if (this === A) return false > else return Function.prototype[Symbol.hasInstance].call(this, obj) > } > } > > class B extends A {} > class C extends B {} > > let c = new C > > console.log(c instanceof B) // true, as expected > console.log(c instanceof A) // false, as expected > ``` > > That seems likely to introduce errors or headaches. > > What if the lookup for `Symbol.hasInstance` on an object use > [[GetOwnProperty]]? Then the first version without the conditional checks > would not break subclasses. > > /#!/JoePea > > _______________________________________________ > 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

