zoukankan      html  css  js  c++  java
  • JS面向对象特性和值类型与复合类型

     

     

    JS面向对象之特性已经值类型与复合类型

    一些属性

    1. 空对象
      • 空对象也是对象, 只是有存变量的变量名, 没有对象属性
    1. var o ={};
    1. 参数传递
      • 值类型: 函数内外两个变量, 两个数据, 都不相同
      • 引用类型: 函数内外变量不同, 一个数据, 相同地址

    赋值

    1. var num =123;
    2. var num2 = num;

    值类型的赋值特点

    1. 将变量内的数据全部拷贝一份, 赋值的变量
    2. var num = 123 表示变量中存储中的数字是 123
    3. 将 123 数据拷贝一份, 内存中有 2 个数据
    4. 将拷贝数据复制num2
    5. 特点是在内存中有2个数据副本

    引用(复合)类型赋值

    1. var o ={ name :'张三'};
    2. var obj = o;
    1. 引用类型赋值就是将变量 o 中存储的数据拷贝一份( 地址 ), 然后将数据赋值给obj
    2. 内存中只有1份数据
    3. 特点是两个变量,一个数据,指向同一个地址

    深拷贝与浅拷贝( 保证对象的属性也是引用类型 )

    1. 深拷贝的概念

      • 拷贝的时候, 将数据中的所有引用类型的值, 全部拷贝一份, 数据在内存中独立, 就是深拷贝
      • 修改拷贝数据和源数据, 没有联系
      • 特点: 内存隔离,完全独立
    2. 浅拷贝的概念

      • 拷贝的时候, 只针对当前对象的属性进行拷贝, 而引用类型不考虑

    对象的动态特性

    1. 在 js 中, 一个对象需要属性, 就可以利用 对象.属性名 = 值 的方式, 为这个对象添加成员, 只要赋值成功, 对象就增加了新的属性

      • 想要添加方法, 就添加方法
      • 想要添加属性, 就添加属性
      • 想要移除属性或方法, 使用 delete
    2. 对象属性的访问形式

      • 点语法: o.name
      • 关联数组: o[name]
    3. 混入方法( extend )

    1. function extend(o1, o2){
    2. for(var key in o2){
    3. o1[key]= o2[key];
    4. }
    5. }
    1. 如果需要给对象动态添加成员, 必须使用关联数组语法
    1. var o ={
    2. name :'张三',
    3. sayHello :function(){
    4. console.log('Hello, 我叫'+this.name );
    5. }
    6. }
    7. console.log( o.name );// 访问的是 o 的name 属性
    8. console.log( o['name']);
    9. o.sayHello();
    10. o['sayHello'];// []中的是字符串

    参数传递

    1. 作为函数中的参数, 就是将参数的数据复制一份, 传递给函数的形参
    1. function foo(num){}
    2. var a =123;
    3. foo(a);
    * 函数在调用的时候, 首先需要将参数中的数据复制一份, 数字 123 复制一份
    * 跳转到函数中, 完成形参赋值, num = 123;
    * 进入函数体, 执行每一句函数
    
    1. 值类型作为函数参数传递的特征, 函数内与函数外是两个不同的变量, 只是值相等
    2. 引用类型作为函数参数传递的特征, 函数内与函数外是两个不同的变量, 但是是指向相同得自, 指向同一个对象
      • 函数内部允许修改函数外部的对象的数据

    构造函数

    构造函数的作用

    1. new 的作用, 初始化数据
    2. 在 js 给对象添加属性时, 使用对象的动态特性结合this(这里this指的是使用构造函数创建的实例对象), 来进行赋值, 添加成员

    构造函数创建对象的过程

    1. 代码: var 五类= new Person();
    2. 使用 new 创建一个对象, 它类似于o = {}, 是一个没有任何成员的空对象
      • 使用 new 创建对象, 对象的类型就是创建他的构造函数名
      • 使用 {} 创建对象, 相当于使用new Object, 他的类型都是 Object
    3. 调用构造函数, 创建实例对象, 初始化成员
      • 构造函数在调用的一开始, 有一个赋值操作, this指向刚刚创造错来的实例对象(引用地址)
      • 隐藏在构造函数中this表示刚刚创建出来的对象
    4. 在构造函数中使用this结合对象的动态特性, 为实例对象添加成员

     

  • 相关阅读:
    EzHttp 流传输调用代码示例
    使用EzHttp框架 开发基于HTTP协议的CS轻应用
    [转]Installing Memcached on Windows
    SQLiteServer+SQLiteClient 用于.Net项目的SQLite服务端程序和客户端类库
    ERROR: Pillow-5.2.0-cp35-cp35m-win_amd64.whl is not a supported wheel on this platform.
    Linux下的tar压缩解压缩命令详解
    scp 基于 SSH 的安全远程服务器文件拷贝
    大批量删除列表中元素的方法,自己用本办法做的
    Python 列表 pop() 方法
    可遍历的数据对象enumerate() 方法的使用
  • 原文地址:https://www.cnblogs.com/huangshikun/p/6678064.html
Copyright © 2011-2022 走看看