zoukankan      html  css  js  c++  java
  • 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 = {},但工厂函数只能在局部添加
    各自适用场合:
    构造函数:适应用于大型项目,属性以及方法时常变换的项目
    工厂函数:适应用于小型项目,或者正在制作过程还没有成型的项目

        

  • 相关阅读:
    Caffe + Ubuntu 15.04 + CUDA 7.0 新手安装配置指南
    姚斌分布式作业一
    一个简单正则表达式引擎的实现
    学习编程的方法
    [Leetcode]012. Integer to Roman
    [Leetcode]011. Container With Most Water
    JOS lab1 part2 分析
    我的Android Studio配置
    [Leetcode]009.Palindrome Number
    [Leetcode]008.String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/jinmmm/p/14318044.html
Copyright © 2011-2022 走看看