话说有个人叫老王
let dad = {
name: "老王",
family:"王氏家族"
};
有一天他想生个儿子,可是老王他自己也生不出来,于是他跪了七天七夜求上天怜悯,玉皇大帝于心不忍便赐给他一台儿子制造机
function sonCreator(){}
玉皇大帝说,只要把这台机器注入你的血统,制造出来的就是你的儿子,老王听罢千恩万谢,随即将自己的血统注入机器
sonCreator.prototype = dad;
接下来老王就开始制造儿子了
let son = new sonCreator();
老王问儿子,你哪家的?
son.family; //王氏家族
老王又问你的名字是啥啊?
son.name; //老王
老王一看大吃一惊,怎么跟我名字一样,小王微微一笑回答道:“你没给我起名字啊,我只好通过制造机找到你的名字先用着了”。老王顿悟,原来是这样啊,我给你起个名字不就完了。
son.name = "小王";
起完名字,老王转头一想,为何不在制造儿子的时候就把名字起好呢?顺便把生日也记录一下,于是老王把儿子制造机一顿修改
function sonCreator() {
this.name = "小王" + Math.random();
this.time = new Date().getTime()
}
然后把儿子回炉重造了
son = new sonCreator();
这下老王很开心,又制造了几个儿子
s2 = new sonCreator();//{ name: '小王0.47669241584207844', time: 1624352962928 }
s3 = new sonCreator();//{ name: '小王0.12036476430215615', time: 1624352962928 }
这下老王有3个儿子了,大儿子son调了个皮,偷偷给老王扣了个绿帽子
son.__proto__.family = "八氏家族";
son.family; // "八氏家族";
s2.family; // "八氏家族";
s3.family; // "八氏家族";
老王很奇怪,儿子也改不了制造机的血统信息啊?这是咋回事呢,老王赶紧问玉帝,玉帝告诉他儿子的__proto__和儿子制造器的prototype是一样的,都指向了老王自己,不仅可以访问到老王,还可以给老王带绿帽子,这可如何是好?各位读者,如何才能让小王既完整的继承老王的血统,又没办法给老王戴绿帽子呢?