• Javascript面向对象编程--封装


    Javascript是一种基于对象的语言,一切都是对象;但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class;

    如果我们要把“属性”(property)和“方法”(method),封装成一个对象,甚至要从原型对象生成一个实例对象,我们应该怎么做呢?

    一 , 生成对象的原始模式

         假定我们把box看成一个对象,它有“名字”和“颜色”等属性;

    var box = {
        name : '',
        color : ''
      }

          根据这个原型对象的规格(schema),生成两个实例对象;

    var box1 = {}; // 创建一个空对象
        box1.name = "大毛"; // 按照原型对象的属性赋值
        cat1.color = "黄色";
    var box2 = {};
        box2.name = "二毛";
        box2.color = "黑色";

    这就是最简单的封装,把两个属性封装在一个对象里面。但是,这样的写法有两个缺点,一是如果生成几个实例,写来就非常麻烦;二是实例与原型之间,没有任何方法可以看出有什么联系。

    二 , 工厂模式

          工厂模式解决了代码重复实例化的问题

    function creatObject(name,age){
            var obj = new Object();            //创建对象
            obj.name = name;             //添加属性
            obj.age = age;
            obj.run = function(){                 //添加方法
                return this.name + this.age +'运行中...';
            };
            return obj;                               //返回引用对象
        };
        var box1 = creatObject('lee',100);  //实例化
        var box2 = creatObject('jack',200);
    
        alert(box1.run());
        alert(box2.run());

    这种方法的问题依然是,box1和box2之间没有内在的联系,不能反映他们是同一个原型对象的实例

    三 , 构造函数模式

         为了解决从原型对象生成实例的问题,Javascript提供了一个构造函数(Constructor)模式。

         所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。

    function Box(name,age){     //创建一个对象,所有构造函数的对象其实就是Object
            this.name = name;        //添加属性
            this.age = age;
            this.run = function(){    //添加方法
                return this.name + this.age + '运行中...';
            };
        };
        var box1 = new Box('lee',100);  //实例化
        var box2 = new Box('jack',200);
    
        alert(box1.run());
        alert(box2.run());
    
        // 1,构造函数没有new Object,但它后台会自动var obj = new Object
        // 2,this就相当于obj
        // 3,构造函数不需要返回对象引用,它是后台自动返回的
  • 相关阅读:
    redis的rpm包下载安装
    linux下创建普通用户并赋予某个目录的读写权限
    nginx软件优化
    GIT分支简单操作
    mysqldump导入导出数据
    rsync守护进程方式同步实例-004
    rsync多模块配置&排除功能-003
    rsync数据同步方式-002
    rsync简单介绍-001
    Redis cluster 日常操作命令
  • 原文地址:https://www.cnblogs.com/cbhello/p/3333432.html
Copyright © 2020-2023  润新知