zoukankan      html  css  js  c++  java
  • 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,构造函数不需要返回对象引用,它是后台自动返回的
  • 相关阅读:
    Salesforce LWC学习(三十七) Promise解决progressindicator的小问题
    Salesforce Consumer Goods Cloud 浅谈篇三之 行动计划(Action Plan)相关配置
    python 3.7环境安装并使用csv
    分享数据库优化文章
    php 5.4 var_export的改进
    CentOS7 启动 firewalld 防火墙失败,查看日志提示超时
    使用 SSL 加密的 JDBC 连接 SAP HANA 数据库
    CAS学习笔记一:CAS 授权服务器简易搭建
    202110期自考总结
    自定义 OpenShift s2i 镜像与模板——OracleJDK8
  • 原文地址:https://www.cnblogs.com/cbhello/p/3333432.html
Copyright © 2011-2022 走看看