如果我使用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);
答案 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
手动遍历链,或者使用它来检查对象是否是直接后代。