这首诗假设你熟识基本上的缺省及json第一类的用语
这首诗假设你能分确切表达式的this对准难题
假如你暂还不乐意,请先读出来这首诗与此同时假设你晓得甚么是计算机程序,和双向二叉树先看两个众所周知的双向二叉树
下面这段标识符,是两个众所周知的双向二叉树
他们根本无法透过n.next来找出下两个结点
但没配套措施从现阶段结点找出上两个结点
但这和蓝本链有甚么亲密关系呢?
现阶段还没亲密关系。蓝本第一类从哪来?
预测下面这段标识符
为甚么obj没错是空的,却还能初始化toString方式?
这toString方式是这儿来的呢?
再比如说他们的数组第一类
其实,这些方式都来自于一个叫做蓝本的家伙
他们可以使用 第一类.__proto__ 的形式把蓝本第一类打印出来
这是所有第一类的两个隐式属性, 也就是正常情况下打印第一类, 他们是看不到这个属性的
但他们依然可以透过__proto__ 这样两个比较奇怪的属性名字来访问蓝本第一类
这个属性名称访问起来确实不够方便,实际上它还有另外一种访问方式
也是一种比较正式的访问方式, 就是透过表达式名来访问
例如看下面这个例子
现在他们大概有了一些疑问
1.蓝本第一类中的所有属性,实例第一类都能随便访问吗?2.每个实例第一类都有自己的蓝本第一类, 还是大家共用两个?3.实例第一类自己的属性和蓝本的属性冲突了, 会访问谁呢?4.蓝本第一类跟继承有甚么亲密关系?5.蓝本链又是怎么来的?他们依次来解决这几个疑问
蓝本第一类中的所有属性,实例第一类都能随便访问吗?废话不多说, 他们来试验一下, 就晓得结果
在下面的标识符中,他们创建两个缺省 Phone
与此同时他们给蓝本第一类,添加了 price、color两个属性
与此同时添加了 playmusic、phonecall两个方式
接下来他们透过实例第一类来访问一下这些内容
可以看到,蓝本中的属性和方式都可以被实例第一类直接访问!
每个实例第一类都有自己的蓝本第一类, 还是大家共用两个?这是一道非常简单的数学证明题,证明过程如下:
最终结论是, 所有实例第一类共享同两个蓝本第一类
实例第一类自己的属性和蓝本的属性冲突了, 会访问谁呢?他们再来试验一下
可以看到, 如果第一类本身存在这个属性或方式, 会优先访问自己的
假如没, 则访问蓝本的属性, 访问过程如下图
蓝本第一类跟继承有甚么亲密关系呢 ?请你再思考两个难题
假如蓝本也是两个第一类
那么它必然也应该有自己的蓝本第一类,不是吗?
他们可以透过 p1.__proto__.__proto__ 进行访问
他们把图画的再简单一点
从图中可以看出,只要蓝本第一类一直存在
第一类P1就拥有了所有蓝本第一类的能力, 他们也管这个叫做 继承
而这些蓝本第一类之间是甚么亲密关系呢?
蓝本链, 因此而得名
需要补充的难题
蓝本第一类真的没尽头吗?当然不是的, 蓝本第一类由浏览器自动创建, 当然也有它自己的规则
规则如下:
1.每个缺省在诞生的时候, 都会创建两个该表达式的实例第一类作为默认蓝本相当于 Phone.prototype = new Phone();
2.而这个蓝本第一类的蓝本, 则默认对准Object.prototype相当于 Phone.prototype.__proto__ = Object.prototype;
3.当然, Object.prototype 也是它自己的实例相当于 Object.prototype = new Object();
4. 但, Object.prototype不再拥有蓝本第一类相当于 Object.prototype.__proto__ = null
5. 因此,蓝本第一类是有上限的p1.__proto__ 可访问
p1.__proto__.__proto__ 可访问
p1.__proto__.__proto__.__proto__ 为null