Dies ist höchstwahrscheinlich ein Fehler in Knoten 6.x. Betrachten wir die folgenden:
const Foo =() => {};
Foo.prototype = {};
const foo = Object.create(Foo.prototype);
// false in Node 6, true in Chrome
console.log(foo instanceof Foo);
// true in Node 6, true in Chrome
console.log(Foo[Symbol.hasInstance](foo));
Die ersten beiden Protokolle sollten den gleichen Wert zurück, da der Operator instanceof zu nennen definiert und gibt die Methode der @@hasInstance
Foo
, falls vorhanden (§12.9.4
). Was ist interessanter, Knoten Typeerror im folgenden Fall wirft, während false
erwartet wird, als Foo
nicht aufrufbar ist (§7.3.19
):
const Foo = {
"prototype": {},
[Symbol.hasInstance]: Function.prototype[Symbol.hasInstance]
};
const foo = Object.create(Foo.prototype);
// throws in Node 6, false in Chrome
console.log(foo instanceof Foo);
// false in Node 6, false in Chrome
console.log(Foo[Symbol.hasInstance](foo));
PS
Knoten V6.2.2 (64-Bit) wurde für die Tests auf einem Windows-System verwendet.
Vielen Dank für die Überprüfung des Verhaltens. Ich habe ein Knotenproblem hier geöffnet: https://github.com/nodejs/node/issues/7592 – wprl
@wprl Ich denke, dass sie gerade einen älteren Entwurf der Spezifikation oder das es5 und das es6 Verhalten mischten. Nur Neugierig: Verläßt du dich wirklich auf dieses Verhalten? –
Ich benutze 'instanceof' nicht so oft, aber manchmal ... Ich hätte gerne die nächste Version von deco, ein Mixin-Modul, das ich geschrieben habe, um Unterstützung für die Verwendung von' instanceof' zu erhalten. – wprl