检查使用Object.create创建的对象是否是原始对象的实例

时间:2017-11-23 21:03:15

标签: javascript object

如果我使用Object创建Object.create,如何检查新的Object是否是旧版Object的实例

这是一个解释我的意思的例子

var MyClass = {
  property: null
};

MyClass[Symbol.toStringTag] = "My Class";

function newMyClass(property) {
  var instance = Object.create(MyClass);
  instance.property = property;
  return instance;
}

console.log(newMyClass() instanceof MyClass);

为了进一步澄清,我询问这个

function MyClass(property) {
  this.property = property;
}

console.log(new MyClass() instanceof MyClass);

或者这个

function MyClass(property) {
  this.property = property;
}

console.log(Object.create(MyClass.prototype) instanceof MyClass);

2 个答案:

答案 0 :(得分:1)

  

如何检查新对象是否是旧对象的实例

这确实是错误的问题,因为“这是什么实例”的答案将始终是一个函数(构造函数)或null。您提供给Object.create的参数不是构造函数,而是原型对象(也称为proto)。因此,如果您想了解原型对象,请查看Object.getPrototypeOf

var MyClass = {
  property: null
};

MyClass[Symbol.toStringTag] = "My Class";

function newMyClass(property) {
  var instance = Object.create(MyClass);
  instance.property = property;
  return instance;
}

console.log(Object.getPrototypeOf(newMyClass()) === MyClass);

答案 1 :(得分:1)

instance只能用于具有.prototype个对象的构造函数。对于原始原型继承,请使用isPrototypeOf

console.log(MyClass.isPrototypeOf(newMyClass()));

您也可以使用Object.getPrototypeOf手动遍历链,或者使用它来检查对象是否是直接后代。