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

JS面向对象特性和值类型与复合类型的更多相关文章

  1. c++中的复合类型

    复合类型是指基于其他类型而定义的类型. 而这里介绍的是引用和指针.并且指针和引用都提供了对其他对象的间接访问. 引用 引用还是很好理解的,就是为对象起了另外一个名字,引用类型引用另外一种类型. 通常将 ...

  2. Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  3. JavaScript系统学习小结——Object类型、Array类型

    今天学习JavaSript中引用变量中的Object类型和Array类型: 1. Js中大多数引用类型值都是Object类型的实例,Object类型在应用程序中存储和传输数据时,是非常理想的选择: 创 ...

  4. 从 prototype.js 深入学习 javascript 的面向对象特性

    从 prototype.js 深入学习 javascript 的面向对象特性 js是一门很强大的语言,灵活,方便. 目前我接触到的语言当中,从语法角度上讲,只有 Ruby 比它更爽. 不过我接触的动态 ...

  5. js中迭代元素特性与DOM中的DocumentFragment类型 笔记

    JS中迭代元素特性 在需要将DOM结构序列化为XML或者HTML字符串时,多数都会涉及遍历元素的特性,这个时候attributes属性就可以派上用场. 以下代码展示了如何迭代元素的每一个特性,然后将他 ...

  6. 《JS权威指南学习总结--第三章类型、值和变量》

    第三章 类型.值和变量 内容要点 一.数据类型 1.在编程语言中,能够表示并操作的值的类型称做数据类型 2.JS的数据类型分为两类: 原始类型:数字.字符串和布尔值 对象类型 3.JS中有两个特殊的原 ...

  7. JS判断时特殊值与boolean类型的转换

    扒开JQuery以及其他一些JS框架源码,常常能看到下面这样的判断,写惯了C#高级语言语法的我,一直以来没能系统的理解透这段代码. var test; //do something... if(tes ...

  8. C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数

    一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...

  9. Java语言中的面向对象特性总结

    Java语言中的面向对象特性 (总结得不错) [课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知 ...

随机推荐

  1. 前端的UI设计与交互之设计原则篇

    1.亲密性 a)纵向间距示例这三种规格分别为:8px(小号间距).16px(中号间距).24px(大号间距). b)在这三种规格不适用的情况下,可以通过加减『基础间距』的倍数,或者增加元素来拉开信息层 ...

  2. docker进阶-利用dcoker Swarm搭建简单集群

    什么是Swarm   在介绍Swarm之前我们要说一下什么Docker三剑客? Docker-Machine:负责在多种平台上快速安装 Docker 环境. Docker-Compose:Docker ...

  3. SAS9.2的增强编辑器注册解决方案

    系统环境:Win10,64位,SAS9.2破解版 问题: 原win7换成win10后,重装SAS9.2,增强编辑器无法使用. 解决方案: 方案一: 点击"视图"-选择程序编辑器,这 ...

  4. Python中四种样式的99乘法表

    1.常规型. #常规型 i=1 while i<=9: j=1 while j<=i: print(''%d*%d=%2d''%(i,j,i*j),end='') i+=1 #等号只是用来 ...

  5. c语言程序设计第3周编程作业(数字特征)

    题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作x,如果x和n的奇偶性相 ...

  6. Spring学习笔记(1)

    激发pojo的潜能,不会让pojo类继承实现或导入与Spring API相关的任何东西 那么spring怎么装配pojo呢-------->依赖注入(最大好处:松耦合) 耦合具有两面性: 一方面 ...

  7. C语言二维数组作业

    一.PTA实验作业 题目1:7-3 出生年 1. 本题PTA提交列表 2. 设计思路 1.声明一个函数different()用来计算一个年份的不同数字个数 2.定义y(y是来计算符合要求的年份的量), ...

  8. alpha-咸鱼冲刺day8

    一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 正在进行页面整合.然后还有注册跟登陆的功能完善-- 四,问题困难 数据流程大概是搞定了.不过语法不是很熟悉,然后还有各种判定. ...

  9. 201621123062《java程序设计》第三周作业总结

    1.本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用 将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系.步骤如下: 1.1写出你认为本周学 ...

  10. java实现同步的两种方式

    同步是多线程中的重要概念.同步的使用可以保证在多线程运行的环境中,程序不会产生设计之外的错误结果.同步的实现方式有两种,同步方法和同步块,这两种方式都要用到synchronized关键字. 给一个方法 ...