zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    20位活跃在Github上的国内技术大牛
    ubuntu下安装ros出现“无法下载-package.ros.org中某个包-校验和不符”的解决方法
    从ROS bag文件中提取图像
    计算机视觉、机器学习相关领域论文和源代码大集合
    使用XV-11激光雷达做hector_slam
    机器人操作系统(ROS)教程22:ROS的3D可视化工具—rviz
    ROS探索总结(三)——ROS新手教程
    bootstrap文件上传C#实现
    .net分流抢票助手
    谷歌浏览器整个网页截图方法
  • 原文地址:https://www.cnblogs.com/z-dl/p/8917101.html
Copyright © 2011-2022 走看看