__ proto__
前段时间在看剖面4,蓝本链的确是绕但是的,本瓜以后始终指出,如果读懂这句话就能了:
两个第一类的隐式蓝本(__proto__)等同于内部结构那个第一类的缺省的隐式蓝本(prototype)
确实,大部份第一类都合乎这句神性,在控制面板列印一试便知:
const str = new String(“123”) str.__proto__ === String.prototype // true const arr = new Array([“123”]) arr.__proto__ === Array.prototype // true const obj = new Object() obj.__proto__ ===Object.prototype // true const bl = new Boolean(false) bl.__proto__ === Boolean.prototype // true …… const fn = function(){} fn.__proto__ === Function.prototype // true 拷贝标识符尽管他们平时单厢像下列这样写为主,新闻稿形式不那样,但结论维持不变:
const str = 123 str.__proto__ === String.prototype // true const arr = [123] arr.__proto__ ===Array.prototype // true const obj = {} obj.__proto__ === Object.prototype // true const bl = false bl.__proto__ === Boolean.prototype // true …… const fn = new Function() fn.__proto__ === Function.prototype // true 拷贝标识符顺着那个思路,那他们接着在缺省上,继续用 __proto__ 寻找,能得到:
String.__proto__=== Function.prototype// true Array.__proto__=== Function.prototype // true Boolean.__proto__=== Function.prototype // true Object.__proto__=== Function.prototype // true Function.__proto__=== Function.prototype // true 拷贝标识符这些基本缺省(String、Array、Boolean、Object 等),都是用 Function 来内部结构生成的!!
还能用 __proto__ 继续向上找吗? 不能了,因为结论会是始终重复下面这一行标识符:
Function.__proto__ === Function.prototype 拷贝标识符所以,不管你怎样通 __proto__ 隐式蓝本向上找,最终都只能找到 Function,而 Function 的隐式蓝本等同于它的隐式蓝本;
prototype.__ proto__
但是这与他们所知不符呀,不是万物皆第一类吗??
他们尝试再用 __proto__ 向前探一步,发现:
Function.__proto__.__proto__ ===Object.prototype // true Function.__proto__ === Function.prototype // true Function.prototype.__proto__ ===Object.prototype // true 拷贝标识符Function 那个终极缺省,通过查找隐式蓝本的隐式蓝本,竟然等同于 Object 的隐式蓝本!
其实,其它内部结构函数也那样,都能找到 Object:
String.prototype.__proto__=== Object.prototype // true Array.prototype.__proto__=== Object.prototype // true Boolean.prototype.__proto__=== Object.prototype // true Object.prototype.__proto__===Object.prototype // true 拷贝标识符大部份缺省的隐式蓝本的隐式蓝本 等同于 Object 的隐式蓝本!!
认知
为什么要这种设定呢??
为什么第一类只用 .__proto__ 向上查找,最终只能找到 Function?
为什么缺省用 .prototype.__proto__ 向上查找,能找到 Object ?
这种蓝本链查找不是有两套逻辑吗?
后来,本瓜歪认知:
【Function】就好像是创造万物的上帝,它创造了:各种各样的物质【第一类】,物质又分化为:人【字符串】、鱼【数组】、鸟【布尔】、兽【数值】、石头【Date】、花草【正则】等等分类;
这些不同种类的物质,再一代一代延续(繁衍)下去。。。。。。
能从它们的祖先那里继承而来,这一点没毛病,生物 DNA 遗传,龙生龙、凤生凤,老鼠儿子会打洞
let Mouse = function(){ this.makeAHole = true } let m1 = new Mouse() m1.makeAHole // truem1.__proto__.makeAHole === Mouse.prototype.makeAHole// true 拷贝标识符或者还能从【物质】那个原始分类而来, 因为人鱼鸟兽、花草树木、石头都还是属于“物质”,比如都有碳元素,就像字符串、数组、布尔、数值都是属于“第一类”,都有 toString 方法;
Object.prototype.carbon = true let p1 = man p1.carbon // truep1.__proto__.__proto__.carbon ===Object.prototype.carbon// true 拷贝标识符第一类 Object(物质)是由函数 Function(上帝)创造的,没毛病。
上帝(Function)也是一种物质(Object),一切都是物质(Object),物质(Object)起源于大爆炸,起源于空(null),也没毛病。
再来看这张经典的图:
按照咱们“认知”也画两个:
哈哈哈,害行,这次就先认知到这吧。
OK,以上便是本篇分享。 觉得不错点个赞吧,您的鼓励,我的动力,坚持原创质量好文~~ 欢迎评论留言 我是掘金安东尼,输出暴露输入,技术洞见生活。再会吧~~