解析js中的原型链和在原型链中对象属性查找

在了解原型链之前需要先知道什么是原型,什么是原型继承。

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.总结

该博客基本介绍了原型链的形成,以及在原型链中如何查找对象属性的问题,还有两个简单的函数。如果该文章能够对您产生帮助那是再好不过的。

你可能感兴趣的:(解析js中的原型链和在原型链中对象属性查找)