在了解原型链之前需要先知道什么是原型,什么是原型继承。
1,原型:
每一个函数都会有一个prototype属性,当然也就包括构造函数这种特殊的函数在内,我们可以把整个prototype就叫做原型。
2.原型继承
在js中原型继承是实现继承的一种方式,其他的实现继承的方式还有使用call函数apply函数等。实现原型继承的方式是将上级函数实例赋值给下级函数的原型。
3.原型链
在js中由于原型继承的关系,就会产生一种叫做原型链的东西,那么到底什么是原型链呢?
原型链:简单来说就是函数原型通过继承关系联系在一起,形成的链式结构就被叫做原型链。简单来说就是在实现原型继承的时候,会将下级函数的原型和上级函数的实例联系起来,那么多个构造函数相互继承,将彼此的原型联系起来就形成了原型链。
4.原型链中对象属性的查找规则
在原型链中,我们想要查找某一个对象的属性,如果该属性在当前对象所在的函数中查找,如果没有的话就会沿着原型链向上查找,找到的话就返回属性值,如果都没有的话就会返回undefined。举个例子
//原型链中属性的查找
function Person(name,color){
this.name=name;
this.color=color;
}
function Teacher(name,age){
this.name=name;
this.age=age;
}
//实现继承
Teacher.prototype=new Person();
Teacher.prototype.book="书本";
var t1=new Teacher("aa",32);
//查找属性
//1.当Teacher中含有name属性,不管有没有赋值都表明在Teacher中含有name属性
console.log(t1.name);
//2.当查找Teacher中没有的属性的时候,但是Teacher的原型中有该属性
console.log(t1.book);
//3.当查找Teacher原型和本身都没有属性的时候,但是上级函数中有该属性的时候
console.log(t1.color);
以上的三种情况就是一个很明显的利用原型链查找属性的例子,可以写个demo简单实验一下,只要测试过之后肯定能够很清晰的理解啦。
5.在面向对象原型链中常见的函数
1.hasOwnProperty():判断属性是否是自身私有属性,如果是的话返回true,否则的返回false
2.in:判断属性是否可用,不管是自身私有还是原型中的属性,如果可用的话返回true,否则的返回false。
感兴趣的同学可以深究一下这两个函数,这里就不用代码举例子了。
6.总结
该博客基本介绍了原型链的形成,以及在原型链中如何查找对象属性的问题,还有两个简单的函数。如果该文章能够对您产生帮助那是再好不过的。