理解构造函数
2021-08-10 本文已影响0人
Mortimey_yt
举个通俗的例子理解一下: 有人想要造一千个金币,并且要每个金币上面刻有不同的编号,最简单的方法就是,造一个金币的模子,然后再各自刻各自的编号, 构造函数就是这个金币的模子,你每次new一下,就是造一个金币.
构造函数和普通函数的区别:
1.名字:构造函数首字母建议大写;普通函数首字母建议小写
2.内容:构造函数内部可以使用this关键字;普通函数内部不建议使用this,因为这时候this指向的是window全局对象,这样无意间就会为window添加了一些全局变量或函数(关于导致this的原因会在下面介绍)
- 在构造函数内部,this指向的是构造出来的新对象
- 在普通函数内部,this指向的是window全局对象
构造函数默认不用return返回值;普通函数一般都有return返回值
- 构造函数会默认返回this,也就是新的实例对象
- 普通函数如果没有return值的话,返回undefined
- 如果使用了return,那返回值会根据return值的类型而有所不同
这里涉及到要了解的知识点有基本数据类型和引用类型的区别
- return的是五种简单数据类型:String,Number,Boolean,Null,Undefined的话,构造函数会忽略return的值,依然返回this对象;而普通函数会返回return后面的值
function Person(){
var a;
this.name = "zqq";
this.age = 28;
return a;
}
var p = new Person();//返回this对象
var p = Person();//因为a没初始化,所以a是undefined,而undefined属于简单数据类型,所以返回undefined,String,Number,Boolean,Null同理
- 如果return的是引用类型:Array,Date,Object,Function,RegExp,Error的话,构造函数和普通函数都会返回return后面的值
function Person(){
var arr = [];
this.name = "zqq";
this.age = 28;
return arr;
}
var p = new Person();//返回arr空数组,Date,Object,Function,RegExp,Error同理
var p1 = Person();//返回arr空数组,Date,Object,Function,RegExp,Error同理
3.调用:构造函数使用new关键字调用;普通函数不用new关键字调用。
var p = new Person();
var p = Person();
当以new调用构造函数(执行var p = new Person())时,函数内部会发生以下情况:
1.创建一个空对象
var p = {};
2.this变量指向对象p
Person.call(p) //解释了上述this指向的问题
3.p继承了构造函数Person()的原型
p.__proto__ = Person.prototype
4.执行构造函数Person()内的代码
5.return 对象p