如何在Javascript中检查对象实例的实例

时间:2012-10-22 07:22:42

标签: javascript instanceof

我正在使用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

如何检查subInstExample.{new}的实例?还是inst.constructor

谢谢! :)

2 个答案:

答案 0 :(得分:1)

首先,您不检查.constructor,检查构造函数,即Example。每当你测试.constructor属性时,这将是在实例上找到的属性(如果你在构造函数的原型上设置它)。

所以

(new Example) instanceof Example; // true

其次,如果你的Example函数正在返回一个函数,那么Example实际上不是构造函数,因此你不能对它进行任何类型的原型继承检查。构造函数将始终返回一个对象,该对象将是构造函数的一个实例。

您拥有的是一个工厂函数,它创建可能用作构造函数的函数。函数只会通过instanceofFunction的{​​{1}}次检查。

Object

但是看看@franky发布的链接,它应该会给你一些你需要做的见解。

答案 1 :(得分:1)

subInst.__proto__ == inst.prototype