1、prototype介绍
- 功能:返回对象类型原型的引用
- 格式:Class.prototype
2、快速入门
注意:Person.prototype.age
不是Person.age
Person.prototype.age
是指为Person
类下的实例添加的age
属性Person.age
是指为Person
类添加的静态属性
3、原理
当程序加载Person
函数时,会为Person
构造器创建Person
原型对象,它们是独立存在的。构造器中有一个prototype
属性指向了原型对象,原型对象中有一个constructor
属性指向构造器,当Person
类的实例在使用一个不存在的属性时,就会自动到Person
构造器的原型对象中去找。
p1.constructor
:p1
对象中没有constructor
属性,所以会到Person
构造器的原型对象中去找,原型对象中的constructor
指向了Person
构造器,所以最后返回的是构造器。
问题:增加p3.age=20
,那么p1.age
的值是多少?
p3.age
相当于为p3
对象动态添加了一个叫age
的属性,但没有改变Person
原型对象中的age
的值,之后p3
不用去原型对象中找age
属性了,p1
仍然没有age
属性,所以仍然去找原型对象中的age
属性。
4、原型继承
所有类的父类都是Obeject
类,为什么?
问题:
原型是什么?
原型是对象,它是Object
类的实例。
当系统为Person
构造器创建原型对象时,会执行这样一条语句:Person.prototype=new Object()
,也就是说,这个原型是Object
的一个实例。那么,Object
类下的所有属性和方法会被这个原型对象所拥有。Person
下的实例就可以通过这个原型对象使用这些属性和方法,所以说,Object
是所有类的父类。
5、原型链
Person
原型对象也是对象,当这个对象找不到某个属性时,会到Object
构造器的原型对象中去找,这个就是原型链。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。