js复习---工厂函数---构造函数的执行过程

javascript构造函数

  定义: 构造函数一般大写字母开头 构造函数定义时首字母大写(规范), 通过 new 关键字 跟函数名 来实例化对象的函数叫构造函数. 构造函数的主要 功能为 初始化对象,特点是和new 一起使用。new就是在创建对象,从无到有,构造函数就是在为初始化的对象添加属性和方法。

  new 关键字的理解 :

    new 关键字会申请内存在堆内存开辟一块空间, 后台会隐式执行new Object()创建对象, 通过new创建的字符串、数字是引用类型(堆内存),而是非值类型(栈内存)。

    

 1、常用的构造函数: 

    1.    var arr = [];     为      var arr = new Array();       的语法糖。

    2.    var obj = {}     为      var obj = new Object();     的语法糖

    3. var  date = new Date();

  构造函数执行的过程

    

    /*
         * 构造函数创建的执行过程
         * 1. new 关键字会申请内存开辟一块堆内存空间, new 关键字会隐式创建一个对象
         * 2. 将新创建的对象设置为函数中的this, 在构造函数中可以使用this 来引用
         * 3. 逐步执行函数代码块里的代码
         * 4. 将新建的对象作为返回值
         *
         */
        function Person(name, age, gender) {
            // 添加属性
            this.name = name
            this.age = age
            this.gender = gender
            // 添加方法
            this.sayName = () => {
                alert('hello' + this.name)
            }
        }

        const obj = new Person('王尼玛', 30, '人妖')
        console.log(obj)

 

  工厂模式函数

    

  // 工厂模式函数

        function factory(name, age, content) {
            var obj = new Object();
            obj.name = name;
            obj.age = age;
            obj.content = content;
            return obj; // 必须要有返回值
        }
        var factorySon = factory('二狗子', '22', '身娇体柔易');
        console.log(factorySon) // Object 工厂函数针对的都是Object的对象模型

构造函数与工厂函数之间差异:
1.工厂函数需要创建对象,以及必须有返回值
2.工厂函数针对的都是Object的对象模型,而构造函数可以匹配自定义的对象模型
即前者不论创建什么都只有一个xx instanceof Object
而后者根据自定义名而定类型,如上举例所示
3.构造函数弊端,如果在全局中定义相同的局部变量,容易造成全局污染,因为this.xx如果在局部获取不到,就会去全局中获取
4.构造函数可以重写,可以在全局中添加新属性和方法Person.prototype = {},但工厂函数只能在局部添加
各自适用场合:
构造函数:适应用于大型项目,属性以及方法时常变换的项目
工厂函数:适应用于小型项目,或者正在制作过程还没有成型的项目

    

 

posted @ 2021-01-23 16:31  晚风jm  阅读(178)  评论(0编辑  收藏  举报