原型,原型对象,原型链

原型,原型对象,原型链

原型和原型对象

只要创建一个函数,浏览器就会自动为其分配一个原型,可以通过prototype属性访问到原型,原型也可以通过constructor属性访问到其对应的函数,此外,通过函数创建的实例对象默认可以通过_proto_属性访问到原型对象(注:_proto_属性不是标准属性,最好不要用在生产环境中)。

Person(name,age){
   this.name=name;
   this.age=age;
}
console.log(Person.prototype);//输出对应原型
console.log(Person.prototype.constructor);//输出函数本身

var zs=new Person("秋风",100);//创建了一个实例对象
console.log(zs._proto_);//指向原型




为什么要设置原型

方法如果写在原型上,可以解决内存浪费的问题,而且也可以很好的解决函数写在外面容易重名的问题。如Array对象的方法,如foreach,every,都是写在原型上,可以通过实例去访问。

Person(name){
this.name=name;
}
Person.prototype.sayHi=function(){
console.log("你好呀");
}
var zs=new Person(“秋月”);
zs.sayHi();
原型链

从前面已经知道,函数创建出来的实例对象默认是可以访问到原型的,但其实原型也是其他的函数的实例,可以一直往上寻找,直到找到null,所以就形成了一个链状结构。

原型,原型对象,原型链
所以当实例查找某个属性时,先在自己身上找看有没有,如果没有就沿着原型链往上面找,直到找到null都没有的话,就返回undefined。

上一篇:英语网址大全收藏


下一篇:Luogu P3200 [HNOI2009]有趣的数列