zoukankan      html  css  js  c++  java
  • 面向对象2

     

    1. 空对象
       var o = null;
       // 空对象, 存特点是只有变量 o 没有对象数据
      

    值类型与引用类型的存储特征

    1. 内存逻辑结构( 画图 )
    2. 赋值
       var num = 123;
       var num2 = num;
      
      • 值类型赋值的存储特点, 将变量内的数据全部拷贝一份, 存储给新的变量.
      • var num = 123 表示变量中存储的数字是 123.
      • 然后将数据拷贝一份,就是将 123 拷贝一份. 那么内存中有 2 个 数组
      • 将拷贝数据赋值给 num2
      • 其特点是在内存中有两个数据副本.
      • 练习: var o = { name: '张三' };, var obj = o;
    3. 引用类型的赋值
       var o = { name: '张三' };
       var obj = o;
      
      • 赋值就是将 变量 o 中存储的数据拷贝一份, 然后将该数据赋值给 obj
      • 内存中有 1 分数据
      • 问题: 利用 obj 修改的 name 属性会影响到 o 中的 name

    深拷贝与浅拷贝

    1. 什么是深拷贝, 什么是浅拷贝
      • 如果拷贝的时候, 将数据的所有引用结构都拷贝一份, 那么数据在内存中独立就是深拷贝
      • 如果拷贝的时候, 只针对当前对象的属性进行拷贝, 而属性是引用类型这个不考虑, 那么就是浅拷贝
      • 拷贝: 复制一份. 指将对象数据复制.
      • 在讨论深拷与浅拷的时候一定要保证对象的属性也是引用类型.
    2. 代码的封装
      • 利用面向对象的思想, 一般会让对象带有一个 copy 的方法, 来完成自己的拷贝
      • 如果需要将一个对象封装成浅拷贝
      • this 在函数( 方法 )内部, 表示调用该函数( 方法 )的对象.

    对象的动态特性

    1. 在 js 中, 一格对象需要属性, 就可以 利用 对象.属性名 = 值 的方式 为其添加. 只要赋值成功, 对象就新增了属性.
    2. 对象属性的访问形式
      • 点语法: o.name
      • 关联数组: o[ name ]
    3. 曾经使用
      function mix( obj1, obj2 ) {
       for ( var k in obj2 ) {
           obj1[ k ] = obj2[ k ];
       }
      }
      
    4. 凡是需要给对象动态添加成员的时候, 必须使用关联数组的语法

       // 利用关联数组的语法, 访问其 name 属性, 调用其 sayHello 方法
       var o = { 
           name: '张三', 
           sayHello: function () {
               console.log( '你好, 我叫 ' + this.name );
           }
       };
      
       // console.log( o.name );
       console.log( o[ 'name' ] );
       // o.sayHello();
       o[ 'sayHello' ]();
      

    作为参数参数

    1. 作为函数的参数, 就是将 参数的数据拷贝一份 传递给函数的定义中的参数
       function foo( num ) {}
       var a = 123;
       foo( a );
      
      • 函数在调用的时候, 首先需要将参数中的数据拷贝一份. 即 数字 123 拷贝一份.
      • 跳转到函数的定义中( 函数体 ), 再次之前完成了 参数的赋值, 即 num = 123.
      • 正式的进入函数内, 准备执行函数中的每一句话.
    2. 值类型作为函数参数传递的特征, 函数内与函数外是两个不同的变量, 仅仅是值相等而已.
    3. 引用类型作为函数参数传递的特征, 函数内与函数外是两个不同的变量, 但是指向同一个对象.
      • 因此在函数内部允许修改函数外部的对象的数据

    构造函数的作用

    构造函数是干什么用的

    1. 初始化数据的
    2. 在 js 给对象添加属性用的, 初始化属性值用

    创建对象的过程

    1. 代码: var p = new Person();.
    2. 首先运算符 new 创建了一个对象. 它类似于 {}, 是一个'没有任何成员'的对象.
      • 使用 new 创建对象, 对象的类型就是创建它的构造函数名.
      • 使用 {} 无论如何都是 Object 类型, 相当于 new Object.
    3. 然后调用构造函数 为其初始化成员
      • 构造函数在调用的一开始, 有一个赋值操作, 即 this = 刚刚创建出来的对象.
      • 因此在构造函数中 this 表示刚刚创建出来的对象.
    4. 在构造函数中 利用 对象的 动态特性 为对象添加成员.
    
    

     

  • 相关阅读:
    Placing Rooks-CF 1342E
    Yet Another Counting Problem-CF 1342C
    [SDOI2016]齿轮
    Rinne Loves Xor
    Labyrinth CodeForces
    Nastya and Scoreboard
    Teacher Bo HDU
    Blood Cousins Return
    D Tree HDU
    设计模式学习笔记(八、行为型-策略模式)
  • 原文地址:https://www.cnblogs.com/lcf1314/p/5722128.html
Copyright © 2011-2022 走看看