• JavaScript模拟"类"的三种方法


    一、构造函数法(最常用)

    
    
       function Cat() {
            this.name = "大毛";
        }
      var cat1 = new Cat();
      console.log(cat1.name); // 大毛

    主要缺点是,比较复杂,用到了this和prototype,编写和阅读都很费力

    二、Object.create()法(ES5特性)

    
    
       var Cat = {
        name: "大毛",
        makeSound: function(){console.log("喵喵喵");}
      };
      var cat1 = Object.create(Cat);
      console.log(cat1.name); // 大毛
      cat1.makeSound(); // 喵喵喵

    三、极简主义法(在对象里定义一个构造函数,返回实例)

    1.封装

    
    
     var Cat = {
        createNew: function(){
          var cat = {
                    name:"大毛",
                    makeSound:function(){console.log("喵喵喵");}
                };
          return cat;
        }
        };
       var cat1 = Cat.createNew();
      cat1.makeSound(); // 喵喵喵

    2.继承

    
    
      var Animal = {
        createNewAnimal: function(){
          var animal = {
                    sleep:function(){ console.log("睡懒觉"); }
                };
          return animal;
        }
      };
      var Cat = {
        createNewCat: function(){
          var cat = Animal.createNewAnimal();
          cat.name = "大毛";
          cat.makeSound = function(){ console.log("喵喵喵"); };
          return cat;
        }
      };
       var cat1 = Cat.createNewCat();
      cat1.sleep(); // 睡懒觉

    3.私有变量和方法(在createNew()方法中,只要不是定义在cat对象上的方法和属性,都是私有的,无法读取。)

    
    
        var sound="哈哈哈";
      var Cat = {
        createNew: function(){
                sound="喵喵喵";
          var cat = {
                    makeSound:function(){ console.log(sound); }
                };
          return cat;
        }
      };
      var cat1 = Cat.createNew();
        cat1.makeSound();//喵喵喵
      console.log(cat1.sound); // undefined
        console.log(cat1.makeSound);//function (){ console.log(sound); }

    4.数据共享(只要把这个内部数据,封装在类对象的里面、createNew()方法的外面即可)

    
    
        var Cat = {
        sound : "喵喵喵",
        createNew: function(){
          var cat = {
                    makeSound:function(){ console.log(Cat.sound); },
                    changeSound:function(x){ Cat.sound = x; }
                };
          return cat;
        }
      };
      var cat1 = Cat.createNew();
      var cat2 = Cat.createNew();
      cat1.makeSound(); // 喵喵喵
      cat2.changeSound("啦啦啦");
      cat1.makeSound(); // 啦啦啦

     

  • 相关阅读:
    Jmeter常用脚本开发之JDBC请求
    Jmeter常用脚本开发之Java请求
    Jmeter常用脚本开发之FTP请求
    Jmeter常用脚本开发之Debug Sampler
    Jmeter常用脚本开发之Beanshell Sampler
    Jenkins构建.net项目
    Charles基本使用
    [daily] emacs显示file name buffer的全路径
    [dev] 刷HHKP的一般流程及常见错误(多图慎点)
    [dev][go] 入门Golang都需要了解什么
  • 原文地址:https://www.cnblogs.com/shen076/p/6558889.html
Copyright © 2020-2023  润新知