• 2.3构造函数模式基础


    构造函数模式的目的就是为了创建一个自定义类,并且创建这个类的实例

    function CreateJsPerson(name,age){
      // 浏览器默认创建的对象就是我们的实例p1 -》 this
      this.name = name; // p1.name = name
      this.age = age;
      this.writeJs = function () {
        console.log("my name is" + this.name)
      }
      // 浏览器再把创建的实例默认的进行返回 }
    var p1 =new CreateJsPerson("张三"20); //CreateJsPerson中的this是当前实例p1
    p1.writeJs(); // writeJs中的this是p1
    var res =
    CreateJsPerson("aaaa",30); // 这样写不是构造函数模式执行而是普通的函数执行,由于没有写return所以res= undefined,并且CreateJsPerson这个方法中的this是window
    console.log(res) // undefined
    var p2 =new CreateJsPerson("李四",30);
    p2.writeJs();

    构造函数模式和工厂模式的区别:

      1.执行的时候

        普通函数执行: createJsPerson()

        构造函数模式执行: new CreateJsPerson() 通过new执行后,我们的CreateJsPerson就是一个类了

        而函数执行的返回值(p1)就是CreateJsPerson这个类的一个实例

      2.在函数代码执行的时候

        相同点: 都是形成一个私有作用域,然后经历形参赋值,预解释,代码开始从上到下执行(类和普通函数一样,它也有普通函数的一面)

        不同点:1)在代码执行之前,不用自己在手动的创建obj对象了,浏览器会默认的创建一个对象数据类型的值(这个对象其实就是我们当前类的一个实例),

            2)接下来代码从上到下执行,以当前实例为执行的主体(this代表的就是当前的实例),然后分别把属性名和属性值赋值给当前的实例

            3)最后浏览器会默认的把创建的实例返回

    引入知识点:

    1.创建一个数组:

      var ary = [] // 字面量方式

      var ary = new Array(); // 实例创建的方式 -》构造函数模式执行的方式

      不管哪一种方式ary都是Array这个类的一个实例

    2.JS中所有的类都是函数数据类型的,它通过new执行变成了一个类,但是它本身也是一个普通的函数

    JS中所有的实例都是对象数据类型的

    3.在构造函数模式中,类中(函数体中)出现的this.xxx = xxx 中的this是当前类的一个实例

    4.p1和p2都是 CreateJsPerson这个类的实例,所以都拥有writeJs这个方法,但是不同实例之间的方法是不一样的

      在类中给实例增加属性(this.xxx = xxx)属于当前实例的私有属性,实例和实例之间是单独的个体,所以私有属性之间是不相等的

       console.log(p1.writeJS === p2.writeJS) ->false

  • 相关阅读:
    DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000) [转]
    自定义Microsoft Visual Studio 代码模板,增加公司和个人信息
    RabbitMQ消息队列名词解释[转]
    RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer) [转]
    RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC) [转]
    RabbitMQ消息队列(六):使用主题进行消息分发[转]
    RabbitMQ消息队列(五):Routing 消息路由 2[原]
    RabbitMQ消息队列(五):Routing 消息路由[转]
    RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)[转]
    RabbitMQ消息队列(三):任务分发机制[转]
  • 原文地址:https://www.cnblogs.com/z-dl/p/8917101.html
Copyright © 2020-2023  润新知