js基础_34、构造函数
创建一个构造函数
js的构造函数就相当于C#中的类,只是ES5之前js没有类class这个用法,都用构造函数模拟类。
创建一个构造函数,专门用来创建Person对象的。
构造函数就是一个普通的函数,创建方式和普通函数没有区别,不同的是构造函数习惯上首字母大写。
构造函数和普通函数的区别就是调用方式的不同,普通函数是直接调用,而构造函数需要使用new关键字来调用。
比如:使用关键字new来调用的函数会有一个返回值,返回的是一个对象,虽然函数本身没有写返回值,代码如下:
<script>
function Person(){
}
var ren=new Person();
console.log(ren);
</script>
输出结果如下:
如果和普通函数一样调用的话就没有返回值,结果就是一个undefined
<script>
function Person(){
}
var ren= Person();
console.log(ren);
</script>
结果如下:
构造函数的执行流程:
1、立即创建一个新的对象
2、将新建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象
3、逐步执行函数中的代码
4、将新建的对象作为返回值返回
使用同一个构造函数创建的对象,我们称为一类对象,也就一个构造函数称为一个类。
我们将通过一个构造函数创建的对象,称为该类的实例。
比如下面创建两个类,一个是人的类,一个是狗的类。
<script>
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
}
function Dog(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
}
var ren=new Person('孙悟空',18,'男');
console.log(ren);
var gou=new Dog('旺财',3,'公狗');
console.log(gou);
</script>
下图输出结果是两个不同的对象,因为new后面的类不同
instanceof
使用instanceof可以检查一个对象是否是一个类的实例。类:构造函数。实例:通过这个构造函数创建的对象。如果是,就返回true,否则返回false。
语法:
对象 instanceof 构造函数
<script>
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
}
function Dog(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
}
var ren=new Person('孙悟空',18,'男');
var gou=new Dog('旺财',3,'公狗');
console.log(ren instanceof Person);
console.log(ren instanceof Dog);
</script>
结果:
所有的对象都是Object的后代,所以任何对象和Object作instanceof检查时都会返回true。
this的情况:
1、当以函数的形式调用时,this就是window对象
2、当以方法的形式调用时,谁调用方法this就是谁。
3、当以构造函数的形式调用时,this就是构造函数创建返回的那个对象(实例)。