要理解原型和原型链,首先要理解普通对象和功能对象。
一、普通对象和功能对象的区别
在Javascript的世界里,所有的对象都是对象,对象之间是有区别的。让我们首先区分普通对象和函数对象,如下所示:
函数f1(){ };var F2=function(){ };var f3=新函数(){ };var O1={ };var o2=新对象();var o3=新f1();控制台日志(对象类型);//functionconsole.log(函数的类型);//function console . log(Type of f1)//function console . log(Type of f2)//function console . log(Type of f3)//function console . log(Type of o1)//Object console . log(Type of o2)//Object console . log(Type of o3)//Object从上面的代码可以看出,f1、F2、F3都是函数对象,而O1、O2、O3都是对象对象,也就是普通对象。函数对象的本质是由新函数()构造的,其他都是普通对象。在理解了功能对象和普通对象之后,后面将解释它们之间的区别。
二、原型
在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:
var parent=function(name){ this . name=name;} parent . prototype . getname=function(){ return this . name;}var son=新家长('花花');console . log(son . getname());//‘花花’显然,son继承了parent的原型中的函数属性getName。
第三,原型链
除了对象原型的原型为空,所有的对象和原型都有自己的原型,对象的原型指向原型对象。
在多级关系中,多个原型层层连接,形成原型链。
在搜索对象的属性时,如果在当前对象中找不到该属性,它将在原型链中向上搜索,直到找到它,如果在原型链的顶部找不到它,它将返回undefined。
四.构造器
构造函数是由构造函数创建的实例的属性。此属性的功能是指向创建当前对象的构造函数。
例如,son.constructor==parent//真
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。