Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
对象原型——prototype
JavaScript——基于原型的语言
要我说,既然你在学习一门全新的语言,那就忘记C++或者Java中的类吧!JavaScript是一种基于原型
prototype的语言。下面就来和我一起逐渐爱上这个机制吧!
什么是原型?在新接触了这个概念以后你也许会一头雾水。我来形象的解释一下吧:
“原型”,英文名prototype,顾名思义,就是原型(我搁这搁这呢)。
想象以下:有这么一个人叫小E,他原来是什么都没有的,因此我们叫他:“身无分文的小E”。duang!他穿了一件衣服,这个衣服有了一些新的属性和方法。于是,小E变成了 “穿着衣服的小E”。那么我们就可以说,“身无分文的小E”是“穿着衣服的小E”的原型。
我想通过这个例子说明什么呢?你有没有发现,“身无分文的小E”和“穿着衣服的小E” 其实是一个小E,只不过后面的小E具有一些新的属性,原来的小E的属性和方法是可以连带着值完全继承到穿衣服的小E的身上的。然后,穿衣服的小E竟然就有了一个新的名字!
简而言之,就是,假如A是B的原型吧,可以说B继承A。但他们不是C++中的拷贝关系,而是传递关系!B实际上还是使用了A的成员!
这就是原型机制的一个奇葩之处,小编也感到很奇怪捏。接下来我们理论性的学习一下。
Js中的原型是什么样的呢?
-
我斗胆把目前接触的对象分为两类:函数对象和实例对象。
-
实例对象:每个实例对象
a都基于一个已有的原型,这个原型是另一个实例对象。可以使用两种方法得到指向原型的引用:\__proto__属性。(已弃用)\Object.getPrototypeOf(a)方法。
-
函数对象: 函数是一个对象,且具有一个是实例对象的
prototype属性。
总而言之,函数具有一个prototype属性,你可以理解为函数的"原型"。不过,这个原型是一个函数自己创建的实例,而不是向其他实例的引用,后者我们称为实例对象的原型。两者一个是真的实例,一个只是引用关系,一定要搞清楚。
下节我将深入从函数的原型与对象的原型为大家讲解原型机制。