向第一类程式设计的词汇,都是采用Canillac同时实现第一类的承继,不过在JS里头,看似采用prototype(蓝本第一类)来顺利完成,那时她们就来聊聊蓝本。
1 prototype是甚么
在认知那个难题以后,她们需先在脑子里展开知识的简述。在JS里,她们有一连串的辅助工具表达式,Number(),String(),Boolean()之类
她们能任何人类别的值,切换为你想的值。不过你可曾想过,她们也能做为缺省来采用,甚么是缺省呢?是将两个任一类别的值,包装袋正式成为两个第一类。譬如
此刻a就并非两个值了,而要两个值2的第一类了,所以难道是两个第一类,就会保有许多的特性,让她们来看一看都有甚么样属性:
呢吗许多呢,当中的toString(),是为的是将值切换为两个数组,里头能传至两个模块,则表示进制,用作将十进制的位数先切换该进制,接着再切换为数组。
如果要某一进制的位数切换为10进制,还是得采用parserInt()表达式。
valueOf()表达式则是为的是返回值是多少。。。
以上她们看到的所以多表达式,都是Number做为缺省的公有特性,只要是由它构造出来的第一类,都是有这些特性的,所以她们给这些公有特性两个引用叫prototype。对于普通的表达式来说,那个特性一点用都没有,不过对于缺省来说,在创造两个实例的时候,那个特性是实例第一类的蓝本了。
你看,表达式X的特性prototype,是两个实例的蓝本第一类两个实例都共享了weight那个特性。这两个实例都是没有weight那个特性的,所以她们就会主动向上寻找,去她们的蓝本第一类去找有没有那个特性。
不过那个实例要是有那个特性,所以就不会去读取蓝本的那个特性值,这是两个需要注意的地方。
2 蓝本链
每个第一类都有自己的蓝本第一类,每个蓝本第一类也是两个第一类,所以它必然保有自己的蓝本,这种环环相扣的链式关系,她们就叫它 蓝本链。
如果让两个第一类去读取它不存在的特性,读取不到,所以它就会上溯,去找它的蓝本,看一看里头有没有那个特性,如果还是没没有,那就再去找蓝本的蓝本,一直找一直找,最后两个大BOOS是Object.protype(所有第一类都承继了Object.protype,因为她们都是第一类,都是由Object那个缺省逐步生成的,就好像一棵树的根节点一样),如果里头还是没有的话,那就会返回undefined.不过要是那个第一类一开始就有那个特性,所以会优先读取自身的那个特性。