构造函数,就是JavaScript程序定义好的构造函数,我们直接使用就可以了,所谓的构造函数,实际也是一种函数;构造函数专门用于生成,定义对象的,另外,通过构造函数,生成的对象,称为实例化对象。
构造函数分为两种, 一种是JavaScript程序定义好的构造函数,称为 内置构造函数; 一种是程序员自己定义的构造函数,称为 自定义构造函数
构造函数和普通函数的区别:
1、构造函数一定要和 关键词 new 一起使用,new 关键词具有特殊的功能,会自动的给 构造函数中 定义一个对象,并且返回这个对象,我们只要对这个对象设定属性,设定方法就可以了
2、构造函数为了和其他函数区别
语法规范规定,构造函数,函数名称,第一个字母必须大写,使用大驼峰命名法
3、构造函数,给对象定义属性和方法的语法,与一般函数不同
自定义构造函数:
1、函数名称要使用大驼峰命名法
2、自定义构造函数中,不要定义对象,和 定义return
new 关键词会执行,如果定义了,会产生冲突
总结
new 的作用
1、在构造函数中,自行创建一个对象,并且返回这个对象
2、因为new 关键词,创建了对象,此时,构造函数中的this,才会指向这个对象
也就是将来生成的实例化对象;实例化对象和普通的对象,没有任何的区别,只是建立方式不同而已
3、所有的构造函数中,this的指向,都是将来通过这个构造函数生成的实例化对象
ES5构造函数语法:
<script>
// 构造函数
function Fun1(name,age){
// 定义属性
// 给实例化对象,添加name属性,属性值是输入的name参数
this.name = name;
this.age = age;
}
// 在构造函数的 prototype 属性中,来定义实例化对象的方法
Fun1.prototype.f1 = function(){
console.log(this.name , this.age);
}
const obj1 = new Fun1('张三',18);
console.log(obj1);
</script>
经过实践的考证,ES5的构造函数有一些问题,最大的问题,就是定义 prototype 是在函数之外定义的,调用构造函数,生成实例化对象,一定要在定义 prototype 之后,否则生成的实例化对象,只有属性没有函数方法。
所以在ES6中,新增语法形式 class 类,是一种新的定义构造函数的语法,作用和原理与ES5语法完全相同,只是语法格式和书写方式,不同
ES6构造函数class
<script>
// 构造函数
class Fun2{
// 函数构造器
constructor(name,age){
// 定义属性
// 给实例化对象,添加name属性,属性值是输入的name参数
this.name = name;
this.age = age;
}
f2(){
console.log(this.name , this.age);
}
}
const obj2 = new Fun2('李四',20);
console.log(obj2);
</script>
ES6语法的构造函数
封装class类
与ES5语法区别,封装的是class关键词,不会被预解析
语法格式:
class 类名{
构造器,专门接收封装类时的参数和给实例化对象定义属性和属性值
在给实例化对象定义属性和属性值
不知道实例化对象的具体名称,使用this来替换
constructor(参数...){
this.属性 = 参数;
this.属性 = 属性值;
}
定义实例化对象中,需要使用的方法和函数
方法名称(){
在方法中,是在定义变量,使用let const var 等来声明变量
let 变量 = 数值;
如果调用对象的数据,必须是 对象.属性
对象名称不确定,使用this来替换
}
}