1.构造函数:
什么是构造函数:就是将具有相同属性和方法封装在一起。
构造函数的作用:
封装函数,方便实例化和调用,方便代码的维护以及提高开发效率。
构造函数的定义:
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
}
Person.prototype.run=function(){
console.log('人都有跑的方法');
}
注意:上面的函数定义Person(name,age,gender)
中的name,age,gender均是形参,在函数的实例化中,我们会传递实参,下面就开始实例化:
- 使用
new
关键字创建的对象,对象的类型就是创建这个对象使用的构造函数的函数名 - 使用
{}
创建对象,对象的类型一定是Object
,相当于使用了new Object()
,下面我们使用new
关键字来进行实例化:
上面提到:Person已经具有name,age,gender的属性,在实例化的过程中,我们就可以通过传递实参来对实例化的对象p进行赋值:
var p=new Person(‘张三’,‘22’,‘男’)//注意这里的符号均为英文符号
我们同时实例化出来的对象p已经具备了Person的run方法,我们同时可以通过控制台检查p的run方法输出:
p.run();
所以上面的过程实际就是p的实例化,而实例化出来的p就是Peson的一个实例。
实际上,在上面的构造函数被创建的同时,会默认的创建一个原型,而这个原型我们可以通过prototype
来访问到。在实例化对象过程中,被实例化的对象在调用他的一些方法时会首先到构造函数中去访问属性和方法以及赋值,但是在构造函数中都找不到该有的属性以及方法时,他会到构造函数的原型中继续查找有没有要访问的属性以及方法,如果有,就会返回,否则存在两种特殊的情况;
1.访问不到属性:就连该构造函数的原型中都不具备要找的属性,就直接的返回undefined;
2.访问不到方法:就连该构造函数的原型中都不具备我们要找的方法,就会直接的返回错误(抛出异常)。
2.什么时原型
原型:是指构造函数创建时会默认创建一个原型属性;
下面举例子理解原型:
function Person(name){
this.name=name;
}
Person.prototype.age=34;
Person.prototype.run=function(){
console.log('人都具备跑的方法');
}
下面开始实例化:
var p1=Person('张三');
下面我要访问实例化出来的p1
的age属性:
console.log(p1.age);
实际上,p1.age
的访问过程时这样的:
第一步:p1时通过Person()实例化出来的一个实例,p1会首先在Person()的构造函数中去访问age属性;(他并未找到要找的属性)
第二步,他并未在Person中找到要找的属性,接下来,p1会去Person()的原型中会查找,他找到了age这个属性。
下面访问p1的eat方法:
p1.eat();
重复上述的访问过程,发现在构造函数以及构造函数的原型中都没有找到eat的方法,这时候,由于访问的是方法,所以直接就会抛出异常。