instanceof在节点4中评估为true,但在节点6中评估为true

时间:2016-07-07 19:19:28

标签: javascript node.js prototype prototype-chain

当我在节点4中执行此操作时,最后一个语句的计算结果为true,但在节点6中,它的计算结果为false。为什么呢?

F = () => {};
F.prototype = {};
Object.create(F.prototype) instanceof F;

1 个答案:

答案 0 :(得分:2)

这很可能是Node 6.x中的一个错误。请考虑以下事项:

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));

前两个日志应该返回相同的值,因为instanceof运算符被定义为调用并返回@@hasInstance Foo方法,如果存在(§12.9.4)。更有趣的是,节点在以下情况下抛出TypeError,而false是预期的,因为Foo不可调用(§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

Node v6.2.2(64位)用于Windows系统上的测试。