原型一直都是js中比较难理解的一块,那么原型究竟是什么,原型链又是什么?
原型Prototype是指当我们只要创建一个新的函数,就会根据特定的规则为这个函数创建一个prototype属性,这个属性指向函数的原型对象,原型对象通过其自身的constructor属性中的指针又指向拥有prototype属性的函数,也可以说是构造函数。
原型链是指如果让一个函数a的原型对象等于另一个类型b的实例,那么此时的a的原型对象就包含一个指向b的原型对象的指针,相应的,b的原型中包含指向构造函数b的指针,如果b的原型对象又等于类型c的实例,那么上述的关系依然成立,层层递进下去,就形成了实例与原型的链条,这个链条就是我们的原型链了。
我们的原型链还可以用来实现继承。那么我们首先要明白什么是继承,通俗的来说,继承是指我们运用原型让一个引用类型拥有另一个引用类型的属性和方法。
当我们在通过原型实现继承时,原型会变成另一个类型的实例,而所继承的实例属性就会变成现在的原型属性;在创建子类型的实例时,不能向超类型构造函数传递参数,就相当于修改了超类型构造函数的原型,从而影响后面所有的对象实例。
原型搜索机制:当代码在读取 被/某个对象的属性时,会执行一次搜索。首先在这个对象实例本身中查找相应的属性名称,如果找到了就返回相应的属性值,如果没有找到就会通过proto指针继续查找指针所指向的原型对象,在原型对象中查找对应的属性名,找到了就返回相应的属性值,如果没有找到继续查找该原型对象所指向的原型对象,一环一环的查找,直到原型链的末端,一般来说,原型链的末端是Object对象的原型对象。
时间: 2024-12-27 00:53:34