检查对象是否是类的"直接实例"

Sac*_*cha 9 javascript class subclass object instance

我有两节课:

class Bar extends Foo { // Foo isn't relevant
  constructor(value) {
    if (!(value instanceof Foo)) throw "InvalidArgumentException: (...)";
    super();
    this.value = value;
  }
}

class Baz extends Bar {
  constructor(value) {
    super(value);
  }
}
Run Code Online (Sandbox Code Playgroud)

Bar constructor如果检查value是美孚的一个实例,它如果不是抛出一个错误.至少,这就是我想要的.如果传递a Bar或a Bazas值,则if语句true也会返回.目标是只让我们Foo通过.
我已经找到了这个答案,但这并没有真正回答我的问题.

Moh*_*han 6

检查构造函数:

if (!value || value.constructor !== Foo)
  throw 'InvalidArgumentException: (...)';
Run Code Online (Sandbox Code Playgroud)

或对象的原型(这更像是什么instanceof):

if (!value || Object.getPrototypeOf(value) !== Foo.prototype)
  throw 'InvalidArgumentException: (...)';
Run Code Online (Sandbox Code Playgroud)