JavaScript继承之老王的绿帽反击战

上一篇 JavaScript继承之老王的焦虑

上回说到,老王的大儿子给他扣了个绿帽子,老王很是难受,经过一番学习后,老王想到了借用构造函数来防止这个问题蔓延

先给自己整个制造器(构造函数)

function dadCreator(){
	this.name = "老王";
	this.family = "王氏家族";
}
复制代码

然后当儿子制造器开始工作的时候,借用自己构造器

function sonCreator (){
    dadCreator.call(this);
    this.name = "小王" + Math.random();
    this.time = new Date().getTime();
}
复制代码

接下来,给儿子制造器注入老王的血统

sonCreator.prototype = new dadCreator();
复制代码

开始制造儿子,随着一阵轰隆隆的声音,两个小王s1,s2诞生了

let s1 = new sonCreator();//{ name: '小王0.019872806426974865', family: '王氏家族', time: 1624441361604 }
let s2 = new sonCreator();//{ name: '小王0.5071795803170032', family: '王氏家族', time: 1624441456919 }
复制代码

这种操作其实是相当于根据老王制造器,制造出一个新的老王,可以称之为老王2号,然后修改了老王2号的属性,将其名字改成小王。

小王s1微微一笑,你以为这样我就不可以给你带绿帽子了吗?随后一顿操作

s1.__proto__.family = "八氏家族";
console.log(s1.__proto__.family);// 八氏家族
复制代码

如果访问小王的__proto__属性,还是可以查找到的,并且还可以继续给老王扣绿帽子的。老王虽然被扣了绿帽子,但是一点也不生气,哈哈大笑说道:”来继续给爸爸扣绿帽子啊,哪怕你扣100顶,你还是我儿子,s2还是你亲弟弟!“

console.log(s1.family);// 王氏家族
console.log(s2.family);// 王氏家族
复制代码

这是为什么呢?原来实际的s1、s2实际属性是这样的

{
	name:'小王0.019872806426974865', 
	family: '王氏家族', 
	time: 1624441361604,
	// 以下是原型的属性
	__proto__:{
		name:'老王',
		family:'八氏家族' //修改后的
	}
}
复制代码

JavaScript继承之老王的故事到此结束。更多知识点请点击github.com/mqyqingfeng…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享