我正在使用Javascript,但我遇到了一些问题:
我想检查作为参数给出的变量是对象实例的实例。更清楚,这是一个例子:
var Example = function () {
console.log ('Meta constructor');
return function () {
console.log ('Instance of the instance !');
};
};
var inst = new Example();
assertTrue(inst instanceof Example.constructor); // ok
var subInst = new inst();
assertTrue(subInst instanceof Example.constructor); // FAIL
assertTrue(subinst instanceof inst.constructor); // FAIL
如何检查subInst
是Example.{new}
的实例?还是inst.constructor
?
谢谢! :)
答案 0 :(得分:1)
首先,您不检查.constructor
,检查构造函数,即Example
。每当你测试.constructor
属性时,这将是在实例上找到的属性(如果你在构造函数的原型上设置它)。
所以
(new Example) instanceof Example; // true
其次,如果你的Example
函数正在返回一个函数,那么Example
实际上不是构造函数,因此你不能对它进行任何类型的原型继承检查。构造函数将始终返回一个对象,该对象将是构造函数的一个实例。
您拥有的是一个工厂函数,它创建可能用作构造函数的函数。函数只会通过instanceof
和Function
的{{1}}次检查。
Object
但是看看@franky发布的链接,它应该会给你一些你需要做的见解。
答案 1 :(得分:1)
subInst.__proto__ == inst.prototype