说我有
function Foo() {
// stuff
}
Foo.prototype.bar = function() {
return new Bar();
}
function Bar() {};
module.exports = Foo;
现在说我有
const foo = new Foo();
console.log(foo instanceof Foo); // true
const bar = new Foo().bar();
console.log(bar instanceof Foo); // false
console.log(bar instanceof Foo.prototype.bar); // false
此处Bar
永远不会导出。那么如何测试bar
是否是......的一个实例?我可以以某种方式拥有bar instanceof Foo
或Foo的子集吗?
答案 0 :(得分:1)
默认情况下,Bar
功能constructor
可用Bar.prototype
new Bar()
,该constructor
位于bar instanceof new Foo().bar().constructor
的原型链中。 (这基本上是Bar
在实践中唯一有用的东西。)
Bar.prototype.constructor
相反,如果您不想要以这种方式泄露delete
构造函数,则可以使用新值(或{{{{{{{导出Foo
之前{1}}。如果以这种方式清除了constructor
,您仍然可以检查对象的原型链是否包含与新创建的Bar
实例相同的原型:
var barProto = Object.getPrototypeOf(new Foo().bar());
var isBar = barProto.isPrototypeOf(bar);
答案 1 :(得分:0)
您可以将一个酒吧的原型与另一个酒吧的原型进行比较:
Object.getPrototypeOf(bar) === Object.getPrototypeOf((new Foo).bar())