ES5构造函数语法 和 ES6构造函数class

281 阅读2分钟

1.我们先来理解构造函数

构造函数,就是一种函数,是专门用于生成对象的函数,生成的对象,称为实例化对象。
构造函数分为两种,一种是JavaScript程序定义好的构造函数,称为内置构造函数,一种是程序员自己定义的构造函数,称为自定义构造函数。
构造函数和普通函数的区别
    1,构造函数一定要和 关键词 new 一起使用
        new 关键词具有特殊的功能,
        会自动的给 构造函数中 定义一个对象,并且返回这个对象
        我们只要对这个对象设定属性,设定方法就可以了
    2,构造函数为了和其他函数区别
        语法规范规定,构造函数,函数名称,第一个字母必须大写,使用大驼峰命名法
    3,构造函数,给对象定义属性和方法的语法,与一般函数不同

2.ES5构造函数的用法

<script>
    function Fun1(name,age){//创建实例化对象
        this.name  = name;//定义属性
        this.age = age;
    }
    Fun1.prototype.f1 = function(){//定义实例化对象中的方法
        console.log(this.name , this.age);
    }
    // prototype 是每个函数本身就具有的一个特殊的属性
    // 可以在这个特殊的属性中,存储数据和函数

    const obj1 = new Fun1('张三',18);//通过构造函数创建实例化对象
    console.log(obj1);
    obj1.f1();//调用实例化对象中的方法
</script>

ES5的构造函数有一些问题
    最大的问题,就是定义 prototype 是在函数之外定义的
    调用构造函数,生成实例化对象,一定要在定义 prototype 之后
    否则生成的实例化对象,只有属性没有函数方法

3.ES6构造函数class的用法

ES6中,新增语法形式 class 类,是一种新的定义构造函数的语法
作用和原理与ES5语法完全相同,只是语法格式和书写方式不同
<script>
    class Fun2{//封装类
        constructor(name,age){//构造器用来存储构造函数的参数
            this.name = name;
            this.age = age;//定义属性
        }
        f2(){//定义方法
            console.log(this.name , this.age);
        }
    }

    const obj2 = new Fun2('李四',20);//生成实例化对象
    console.log(obj2);
    obj2.f2();//调用实例化对象中的方法
</script>