往年这个时候,大家已经都在忙碌的金三银四中寻找机会了,今年看大家都很不顺利,不知道大家都找到工作了没有?前几天有人问我一道面试题,比较有意思分享给大家。也希望大家都能找到自己满意的工作!
var A = function() {};
A.prototype.n = 1;
var b = new A();
A.prototype = {
n: 2,
m: 3,
};
var c = new A();
console.log(b.n); // 1
console.log(b.m); // undefined
console.log(c.n); // 2
console.log(c.m); // 3
为什么b.m打印的不是3 而是undefined呢? 我们都知道,实例化出来的对象.proto = 构造函数.prototype;在这里似乎行不通了。
其实很简单,并不是等式不对,而是这个等式是有前提的,A.prototype = { n: 2, m: 3 }这一步,构造函数A的原型对象就已经被强行改变了,整个原型链已经发生了变化,而在此之前实例化出来的变量 b 自然不会收到它的影响,所以此时打印变量 b 的原型,还是被改变之前的状态,也就不足为奇了。
虽然比较简单,但是之前对于
A.prototype.n = 1;的赋值,确实会干扰到对后面的判断。
好了,今天的分享就到这里,下期讲讲原型和原型链。