自己遇到的前端面试问题,请高手来帮忙解决。其他的感兴趣的同学也可以来看看,自己能不能答对。
var A = function() {};
A.prototype = {};
var B = {};
console.log(A.constructor);//Function
console.log(B.constructor);//Object
var a = new A();
A.prototype = {};
var b = new A();
b.constructor = A.constructor;
console.log(a.constructor == A);//false
console.log(a.constructor == b.constructor);//false
console.log(a instanceof A);//false
console.log(b instanceof A);//true
小弟对最后两个console.log的结果不明白,我觉得应该是
console.log(a instanceof A);// true
console.log(b instanceof A);//true
但是在浏览器中试过了,确实是上面的答案,求解,提前谢谢各位。
首先说明 instanceof 和 constructor 没有半毛钱关系,所以题主的问题有效代码如下:
特别注意我添加的两个注释,对象1和对象2并非同一个对象!
再来解释
instanceof
,具体可以参考ECMAScript官方文档和IBM 开发者社区的解释,简而言之,instanceof
运算符返回 A 的 prototype 对象是否存在 a 的原型链中。那么上面代码就可以用下面的图示说明:
可以看到,a 的原型链上已经不存在 A 的 prototype 对象,因此
console.log(a instanceof A);//false
,而 b 的原型链上存在 A 的 prototype 对象,因此console.log(b instanceof A);//true