ES6构造函数class 和 ES5构造函数语法 的异同

构造函数,就是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来替换
                }
            }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值