构造函数创建对象的例子:
- var xiaoming = new Object() --> var xiaoming = {};
- var now = new Date()
- var rooms = new Array(1,3,5) --> var rooms = [1,3,5]
var isMale=/123/;
==>var isMale=new RegExp("123")
- isMale是通过RegExp构造函数创建出来的对象
- isMale是RegExp构造函数的实例
- 以上例子中,Object、Date、Array都是内置的构造函数
自定义一个构造函数来创建对象
- 构造函数
function Person(name,age){
this.name=name;
this.age=age;
}
var p1=new Person("张三",18)
- 说明:
p1就是根据【Person构造函数】创建出来的对象
构造函数的概念
- 任何函数都可以当成构造函数
function CreateFunc(){ }
- 只要把一个函数通过new的方式来进行调用,我们就把这一次函数的调用方式称之为:构造函数的调用
- new CreateFunc(); 此时CreateFunc就是一个构造函数
- CreateFunc(); 此时的CreateFunc并不是构造函数
关于new Object()
- new Object()等同于对象字面量{}
构造函数的执行过程
var p1=new Person();
-
1、创建一个对象 (我们把这个对象称之为Person构造函数的实例)-
_p1
-
2、创建一个内部对象,
this
,将this指向该实例(_p1) -
3、执行函数内部的代码,其中,操作this的部分就是操作了该实例(_p1)
-
4、返回值:
- a、如果函数没有返回值(没有return语句),那么就会返回构造函数的实例(p1)
- b、如果函数返回了一个基本数据类型的值,那么本次构造函数的返回值是该实例(_p1)
function fn(){ } var f1=new fn(); //f1就是fn的实例 function fn2(){ return "abc"; } var f2=new fn2(); //f2是fn2构造函数的实例
- c、如果函数返回了一个复杂数据类型的值,那么本次函数的返回值就是该值
function fn3(){ return [1,3,5]; //数组是一个对象类型的值, //所以数组是一个复杂数据类型的值 //-->本次构造函数的真正返回值就是该数组 //-->不再是fn3构造函数的实例 } var f3=new fn3(); //f3还是fn3的实例吗?错 //f3值为[1,3,5]