js原型,可以理解为模板,就像是一块印刷版,它们的用途类似,当你使用时,是用这块板去印刷一页新的书,然后对印刷出来的书随意修改。 印刷版正常是不应该动它的,但如果你想动它也可以。 这个印刷版是实时的,就像是光线穿过这块镂空印刷版,投影下来的就是每一个新书页。除非你在新书页上覆盖了新的文字(普通文字)去遮盖来自印刷版的投影,否则投影会随印刷版自身文字改变而实时改变,所以正常不应该动印刷版自身。
使用模板:const some = new Object(); new告诉你进行模板制造,造出新的一页纸,
函数想变成一个模板,要满足上面3个条件,所以需要一个普通函数,
模板内容是光影的实时映射,制造工艺(构造函数)里几乎都会有一些逻辑,这些逻辑打印出的文字就不再是光影的实时映射了,而是每张纸上的普通文字,不是光影文字。
如果全是光影文字,那么每张纸没有意义,不去改它(写上普通文字),那就是只模板内容的映射,每张纸没有区别。但印那么多纸,就是用来写的,写上普通文字,每张纸就有了区别,每张纸上普通文字不同,记录的内容不同。构造函数的作用就是在每张纸上预设一些普通文字(可以根据构造函数不同的输入,预设一些不同的普通文字)。
光影文字在每张纸上无法修改,只能用普通文字遮蔽,想改就要去改模板内容,改了就影响所有被投射的光影文字。每张纸上修改各自的普通文字,互相之前不会产生任何影响。 所以模板内容应该放通用的特性,正常也不应该改动它。
原型链继承就像光影的映射,投影源是“模板内容”(prototype),光影映射可以多次进行。 原型链查找就是先查看最后纸张的普通文字,没有普通文字,就去查找光影文字(投影源),投影源本身可以有普通文字和光影文字,还是先找普通文字,找不到继续找光影文字,找下一个投影源,最后的投影源是null,表示没有其他源头了。
存在光影文字,说明存在投影源(模板内容)。 真正的第一个投影源,说明它之上再无源头,那么,这个模板内容里面都是普通文字。 Object就是一个根投影源,名称叫Object,是一个构造函数,模板内容是 Object.prototype。
现在有一个二级投影源(根投影源投出来的一页纸),同时也是一张纸,叫它“老纸”,它会有来自根投影源的光影文字,还有一些自己的普通文字(也可以没有),这个二级投影源投射出一张新的纸,叫它“新纸”。 这张新纸上再写一些普通文字。现在在这张新纸上找文字,先是找普通文字,有就找到,没就找光影源(二级投影源,老纸);先找二级投影源(老纸)普通文字,如果没有普通文字,就继续找光影文字(根光影源),根光影源(根纸)按照定义来说,只有普通文字,还是没找到,那就是不存在。