原型-基础知识总结------彭记(04)
原型
1.什么是原型:构造函数在创建出来的时候,系统会默认帮这个构造函数创建并且关联一个空的对象,这个对象就是原型
2.原型的作用:通过和原型关联的构造函数所创建出来的所有对象,都会共享原型中声明的属性和方法---(相当于后台语言中的父类)
3.如何访问原型:可以通过构造函数名称protoType获取原型。如:Person.prototype
4.如何在原型中添加属性和方法:
a)利用对象的动态特性为原型添加属性和方法。具体可以通过类型.protoType来添加属性和方法。
如:Person.prototype.address='广州';console.log(per.address);
b)直接为构造函数的原型属性protoType赋值一个新的对象
Person.prototyle={
name:'jack',
phone:'12345'
}
var per1=new Person();
console.log(per1.phone);
5.使用原型注意事项:
-1原型的成员需要添加在使用
-2公共的成员才可以放到原型中,不同对象的不同的属性应该放在各自对象内
-3在获取某些成员的时候,如果当前对象中没有,才会去原型中获取
-4在使用对象设置属性的值的时候,只会在对象自身进行查找,如果有,就进行修改,如果没有就会新增
-5在给构造函数的原型属性protoType赋值一个新的对象,会造成赋值前后创建的对象所指向的原型不一样,所有创建建议先赋值新对象之后再通过构造函数创建对象
6.__proto__属性的介绍:
<script>
function Person(name,age){
this.name=name;
this.age=age;
}
var per=new Person('jack',20);
console.log(Person.prototyple);
/*__proto__是一个非标准的属性,不同浏览器会有兼容的问题,所有不推荐在工作和项目中使用,只在自己调试代码的时候使用*、
console.log(per.__proto__);//指向原型
console.log(Person.prototype===p.__proto__);//true
</script>
7.constructor属性:
<script>
function Person(){
/*constructor:指向和原型对应的构造函数*/
console.log(Preson.prototype.constructor===Person);//true
}
</script>
注意:当构造函数.protoType重新赋值为一个新的时候,新的对象中需要手动新增constructor属性,让原型可以正常的和构造函数关联起来,但是constructor属性不是必须要修改的内容,如果没有重新指向,对使用也不会有影响,但是一般情况下,都推荐改成正常的指向。
8.原型链:
-1.对象都有原型,原型是一个对象,所以原型又有原型,这样就形成了一个原型链
-2.属性搜索原则:当使用对象去访问一个属性或者方法的时候
a)先在对象自身中进行查找,如果找到就直接使用
b)如果没有找到,就去对象的原型中进行查找,如果找到直接使用
c)如果没有找到,就沿着原型链依次向上查找,直到找到null
最后插入一张图片帮助大家理解原型: