考虑构造函数:
function ConstructorOne(){/*.....*/}
function ConstructorTwo(){/*.....*/}
考虑以下js代码:
var myInstance = new ConstructorOne();
ConstructorOne.prototype=new ConstructorTwo();
myInstance instanceof ConstructorOne; // false - why?
myInstance instanceof ConstructorTwo; // false - why?
如果我在将构造函数分配给构造函数之后进行实例化,那么一切正常:
ConstructorOne.prototype = new ConstructorTwo();
var myInstance = new ConstructorOne();
myInstance instanceof ConstructorOne; // true
myInstance instanceof ConstructorTwo; // true
第一个例子中出现这种异常行为的原因是什么?
这是the fiddle。
答案 0 :(得分:3)
因为在第一个示例中,您将新的原型对象分配给实例的构造函数。引用docs:
对象instanceof构造函数
instanceof
运算符测试对象原型链中constructor.prototype
的存在。
在此示例中:
var myInstance = new ConstructorOne();
ConstructorOne.prototype = new ConstructorTwo();
... myInstance
原型链(以__proto__
对象开头)包含ConstructorOne的旧(“默认”)原型。在使用代码的第二行完全重写后,ConstructorOne.prototype
不再是myInstance
原型链中的那个对象 - 因此false
导致instanceof
}。