javascript原型链追根溯源

本文探讨JavaScript中的原型链,从Function.prototype和Object.prototype出发,揭示它们作为所有对象始祖的角色。文章介绍了Object.prototype作为所有对象原型链的尽头,以及Function.prototype作为function类型的始祖,详细阐述两者之间的关系和特性。
摘要由CSDN通过智能技术生成

写在前面

上篇文章详细解释了一下prototype与__proto__两个属性的差异与联系。这里涉及到原型链的概念,所以我就又生出了疑问,javascript中既然所有东西都是对象,而他们又是相互继承的关系,子又生孙,孙又生子,无穷匮也,那他们的源头又在哪里,换句话说,他们共同的祖先在哪里。所以,这回我通过对Function与Object两个对象的实验,试图弄清这个事儿。

两个老祖先:Function.prototype与Object.prototype

我把我通过实验得到的结论画成了类图,只想知道结论的朋友看这张图就可以了。这个图里有两个对象是所有对象的始祖,Object.prototype与Function.prototype,它俩是这篇文章的主角,如下:

类图

原型链的尽头:大祖宗Object.prototype

请记住,Object.prototype是一切对象原型的尽头,在javascript中,如果你不故意把__proto__赋值成null,那只有Object.prototype这一个对象的__proto__天然就是null。

console.log(Object.prototype.__proto__ === null);//true

我想既然Object.prototype.__proto的值天然是null,那我人工给它赋值会怎么样,我就很邪恶的尝试了一下:

Object.prototype.__proto__ = {A:'a'};
console.log(Object.prototype.__proto__);

结果报了一大堆很恶心的错误:

Error: Cyclic __proto__ value
    at Object.__proto__ (native)
    at Object.<anonymous> (/Users/myc/Code/test/index.js:1:90)
    at Module._compile (module.js:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值