1,内置的构造函数
在ECMAScript5中内置了以下几种构造函数
String
Number
Boolean
Object
Function
Array
Date
RegExp
Error
var str=new String("hello");
console.log(str);
/*String
0: "h"
1: "e"
2: "l"
3: "l"
4: "o"
length: 5
__proto__: String
[[PrimitiveValue]]: "hello"*/
console.log(typeof str);//Object
通过内置的构造函数可以创建特定的对象。
当然此外,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。
2,通过自定义的构造函数创建对象
function Person(job,name,age){
this.job=job;
this.name=name;
this.age=age;
}
var person1=new Person("cooder","bee",20);
var person2=new Person("star","song",27);
person1和person2是通过Person构造函数创建出来的对象。Person构造函数和普通的函数是一样的,只不过调用的方式不一样而已。
上面创建对象的过程经过下面4个步骤:
1,创建一个新对象
2,把this指向这个新对象。
3,执行构造函数中的代码
4,返回新对象。
person1和person2都是构造函数Person的实例。二者都有一个属性指向构造函数。
console.log(person1.constructor);
console.log(person2.constructor);
/*function Person(job,name,age){
this.job=job;
this.name=name;
this.age=age;
}*/
这个属性并不是在person1和person2自身上面,而是在他们的原型上面。是通过原型链访问到这个属性的。
但是通过构造函数模式,创建对象,如果对象上面有方法,那么这些方法会在每个原型上创建一遍。