Consider the following ES6 Classes:
'use strict';
class Dummy {
}
class ExtendDummy extends Dummy {
constructor(...args) {
super(...args)
}
}
class ExtendString extends String {
constructor(...args) {
super(...args)
}
}
const ed = new ExtendDummy('dummy');
const es = new ExtendString('string');
console.log(ed instanceof ExtendDummy);
console.log(es instanceof ExtendString);
My understanding is that both should be true
, and in Firefox and Chrome they are, however Node says es instanceof ExtendString
is false
. It's the same with other constructors, not just String
.
Software I used:
--harmony
flag.Which JavaScript engine is correct and why?
The function keyword is replaced with the class keyword. There's a special function named 'constructor' where the initialization of the object is done.
Definition and UsageThe extends keyword is used to create a child class of another class (parent). The child class inherits all the methods from another class. Inheritance is useful for code reusability: reuse properties and methods of an existing class when you create a new class.
The instanceof operator tests to see if the prototype property of a constructor appears anywhere in the prototype chain of an object. The return value is a boolean value. Its behavior can be customized with Symbol. hasInstance .
ES6 doesn't support multiple inheritance. Multi-level − Consider the following example.
Node appears to be incorrect, es instanceof ExtendString
should definitely be true
(like everyone would expect).
String[Symbol.hasInstance]
is not overwritten, and Object.getPrototypeOf(es)
should be ExtendedString.prototype
, as the spec details this in the String (value)
function description:
- Return StringCreate(
s
, GetPrototypeFromConstructor(NewTarget,"%StringPrototype%"
)).
The newtarget refers to ExtendString
when you construct the new ExtendString('string')
instance, and since it is a constructor with a .prototype
object it will use ExtendedString.prototype
not %StringPrototype
as the [[prototype]] for the newly created exotic String object:
- Set the [[Prototype]] internal slot of
S
toprototype
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With