javascript中是没有类的说法的,但是却通过构造函数和原型对象来实现了类的作用。之前自己对构造函数不是很理解,趁今天有时间,就做了如下总结。
首先,构造函数(constructor function)是指设计来和new(运算法)一起使用的函数就叫构造函数。通常的作用是用来实例化一个对象用的。
那么new一共做了几件事呢,我们来总结一下
//create a function constructor
function Person(name,age){
this.name=name;
this.age=age;
}
//Invoke constructor to create p1 object
var p1=new Person("小明",23);
console.log(p1.name);//小明
console.log(p1.age);//23
console.log(p1 instanceof Person);
console.log(p1.constructor==Person);//true
1.new 首先创建了一个p1的空对象
2.将对象的内置属性指向了构造函数的原型对象(prototype)
3.将构造函数的this指向新创建的对象
4.执行构造函数的代码
5.返回新创建的对象
一般情况下,构造函数是没有返回值的。然后一个构造函数是允许返回一个对象的。并且这么做,返回的对象成为new表达式的值
//create a function constructor
function Person(name,age){
this.name=name;
this.age=age;
return{"xiaoming":20}
}
//Invoke constructor to create p1 object
var p1=new Person("小明",23);
console.log(p1.xiaoming);//小明
console.log(p1.age);undefined
console.log(p1 instanceof Person);//false
使用构造函数创建对象,看上去还不错,但是若是我们用上方法,你就会发现,若是new多个相同结构的对象,就会创建多个相同的方法,就不符合我们对象代码的要求,浪费内存。
//create a function constructor function Person(name,age){ this.name=name; this.age=age; this.infor=function(){ console.log("I'm"+this.name+",I'm"+this.age); } } //Invoke constructor to create p1 object var p1=new Person("小明",23); console.log(p1.name);//小明 p1.infor();//23 console.log(p1 instanceof Person); console.log(p1.constructor==Person);
//create a function constructor function Person(name,age){ this.name=name; this.age=age; this.infor=function(){ console.log("I'm"+this.name+",I'm"+this.age); } } //Invoke constructor to create p1 object var p1=new Person("小明",23); console.log(p1.name);//小明 p1.infor();//23 console.log(p1 instanceof Person); console.log(p1.constructor==Person);