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结合对象的动态特性, 为实例对象添加成员





  • 相关阅读:
    EntityFramework优缺点
    领导者与管理者的区别
    七个对我最好的职业建议(精简版)
    The best career advice I’ve received
    Difference between Stored Procedure and Function in SQL Server
    2015年上半年一次通过 信息系统项目管理师
    Difference between WCF and Web API and WCF REST and Web Service
    What’s the difference between data mining and data warehousing?
    What is the difference between a Clustered and Non Clustered Index?
    用new创建函数的过程发生了什么
  • 原文地址:https://www.cnblogs.com/liu666/p/5792687.html
Copyright © 2011-2022 走看看