2016-07-07 8 views

Antwort

2

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 @@hasInstanceFoo, 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.

+0

Vielen Dank für die Überprüfung des Verhaltens. Ich habe ein Knotenproblem hier geöffnet: https://github.com/nodejs/node/issues/7592 – wprl

+0

@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? –

+0

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

Verwandte Themen