javascript中构造函数

时间:2022-11-05 14:39:58

 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);