zoukankan      html  css  js  c++  java
  • 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(); // 啦啦啦

     

  • 相关阅读:
    如何设置ASP.NET页面的运行超时时间
    日志文件清理工具V1.1
    【原创】日志文件清理工具V1.0
    【分享】国外后台界面HTML源码 [免费]
    【分享】仿东软OA协同办公服务管理源码
    年底发福利了——分享一下我的.NET软件开发资源
    由12306动态验证码想到的ASP.NET实现动态GIF验证码(附源码)
    【分享】元旦送礼,商业源码免费赠送!
    给大家分享一个jQuery TAB插件演示
    【分享】双12了,也没啥可送大家的,就送大家点商业源码吧!
  • 原文地址:https://www.cnblogs.com/shen076/p/6558889.html
Copyright © 2011-2022 走看看