这篇文章主要是和你一起深入了解JS原型和原型链。原型在JavaScript中是一个很难理解的概念。本文将为您解决这个问题。感兴趣的朋友可以参考一下。
要理解原型和原型链,首先要理解公共对象和函数对象。
一、普通对象和函数对象的区别
在Javascript的世界里,有所有的对象,它们之间也有区别。我们先区分普通对象和函数对象,如下面的代码所示:
函数f1(){ };
var F2=function(){ };
var F3=new function(){ };
var O1={ };
var O2=new Object();
var O3=new f1();
console.log(对象类型);//函数
console.log(函数类型);//函数
console . log(f1类型)//函数
console . log(F2类型)//函数
console . log(F3类型)//函数
console . log(O1类型)//对象
console . log(O2类型)//对象
console . log(O3类型)//对象
从上面的代码可以看出,f1、f2、f3都是函数对象,而o1、o2、o3都是对象对象,也就是普通对象。函数对象本质上是由new function()构造的,其他都是普通对象;了解了函数和普通对象之后,后面会解释两者的区别。
二、原型
在JavaScript中,原型也是对象,原型的作用是实现对象的继承。
在js的所有函数对象中,都有一个属性原型,对应的是当前对象的原型。
而且所有的JavaScript对象都有一个_proto_ attribute(因为_proto_是非标准属性,所以只有ff和chrome浏览器支持,标准方法是Object.getPrototypeOf())。_proto_ attribute指向实例对象的构造函数的原型,可以这样理解:
var p=新人();
console . log(p . _ proto===person . prototype)//true
从上面的代码可以看出,P是实例对象,Person是P的构造器,可以看出,P的_proto_ property指向了构造器Person的原型。
下面的代码用来解释js是如何通过prototype继承的:
var parent=函数(名称){
this.name=name
}
parent . prototype . getname=function(){
返回this.name
}
var son=新父母('花花');
console . log(son . getname());//'花花'
很明显,son继承了parent原型中的函数属性getName。
三、原型链
除了Object的prototype的原型为null之外,所有的对象和原型都有自己的原型,对象的原型指向原型对象。
在多层次的关系中,多个原型层层相连,形成一个原型链。
当搜索一个对象的属性时,如果在当前对象中找不到该属性,将沿着原型链一直向上搜索,直到找到为止。如果它在原型链的顶端,它将返回undefined。
四、constructor
构造函数是由构造函数创建的实例的属性,用于指向创建当前对象的构造函数。
比如son.constructor==parent//真
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。