JS面向对象特性和值类型与复合类型
JS面向对象之特性已经值类型与复合类型
一些属性
- 空对象
- 空对象也是对象, 只是有存变量的变量名, 没有对象属性
var o ={};
- 参数传递
- 值类型: 函数内外两个变量, 两个数据, 都不相同
- 引用类型: 函数内外变量不同, 一个数据, 相同地址
赋值
var num =123;var num2 = num;
值类型的赋值特点
- 将变量内的数据全部拷贝一份, 赋值的变量
var num = 123表示变量中存储中的数字是 123- 将 123 数据拷贝一份, 内存中有 2 个数据
- 将拷贝数据复制给
num2 - 特点是在内存中有2个数据副本
引用(复合)类型赋值
var o ={ name :'张三'};var obj = o;
- 引用类型赋值就是将变量 o 中存储的数据拷贝一份( 地址 ), 然后将数据赋值给obj
- 内存中只有1份数据
- 特点是两个变量,一个数据,指向同一个地址
深拷贝与浅拷贝( 保证对象的属性也是引用类型 )
深拷贝的概念
- 拷贝的时候, 将数据中的所有引用类型的值, 全部拷贝一份, 数据在内存中独立, 就是深拷贝
- 修改拷贝数据和源数据, 没有联系
- 特点: 内存隔离,完全独立
浅拷贝的概念
- 拷贝的时候, 只针对当前对象的属性进行拷贝, 而引用类型不考虑
对象的动态特性
在 js 中, 一个对象需要属性, 就可以利用
对象.属性名 = 值的方式, 为这个对象添加成员, 只要赋值成功, 对象就增加了新的属性- 想要添加方法, 就添加方法
- 想要添加属性, 就添加属性
- 想要移除属性或方法, 使用
delete
对象属性的访问形式
- 点语法:
o.name - 关联数组:
o[name]
- 点语法:
混入方法( extend )
function extend(o1, o2){for(var key in o2){o1[key]= o2[key];}}
- 如果需要给对象动态添加成员, 必须使用关联数组语法
var o ={name :'张三',sayHello :function(){console.log('Hello, 我叫'+this.name );}}console.log( o.name );// 访问的是 o 的name 属性console.log( o['name']);o.sayHello();o['sayHello'];// []中的是字符串
参数传递
- 作为函数中的参数, 就是将参数的数据复制一份, 传递给函数的形参
function foo(num){}var a =123;foo(a);
* 函数在调用的时候, 首先需要将参数中的数据复制一份, 数字 123 复制一份
* 跳转到函数中, 完成形参赋值, num = 123;
* 进入函数体, 执行每一句函数
- 值类型作为函数参数传递的特征, 函数内与函数外是两个不同的变量, 只是值相等
- 引用类型作为函数参数传递的特征, 函数内与函数外是两个不同的变量, 但是是指向相同得自, 指向同一个对象
- 函数内部允许修改函数外部的对象的数据
构造函数
构造函数的作用
- new 的作用, 初始化数据
- 在 js 给对象添加属性时, 使用对象的动态特性结合this(这里this指的是使用构造函数创建的实例对象), 来进行赋值, 添加成员
构造函数创建对象的过程
- 代码:
var 五类= new Person(); - 使用 new 创建一个对象, 它类似于
o = {}, 是一个没有任何成员的空对象- 使用 new 创建对象, 对象的类型就是创建他的构造函数名
- 使用 {} 创建对象, 相当于使用
new Object, 他的类型都是 Object
- 调用构造函数, 创建实例对象, 初始化成员
- 构造函数在调用的一开始, 有一个赋值操作, this指向刚刚创造错来的实例对象(引用地址)
- 隐藏在构造函数中this表示刚刚创建出来的对象
- 在构造函数中使用this结合对象的动态特性, 为实例对象添加成员
JS面向对象特性和值类型与复合类型的更多相关文章
- c++中的复合类型
复合类型是指基于其他类型而定义的类型. 而这里介绍的是引用和指针.并且指针和引用都提供了对其他对象的间接访问. 引用 引用还是很好理解的,就是为对象起了另外一个名字,引用类型引用另外一种类型. 通常将 ...
- Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- JavaScript系统学习小结——Object类型、Array类型
今天学习JavaSript中引用变量中的Object类型和Array类型: 1. Js中大多数引用类型值都是Object类型的实例,Object类型在应用程序中存储和传输数据时,是非常理想的选择: 创 ...
- 从 prototype.js 深入学习 javascript 的面向对象特性
从 prototype.js 深入学习 javascript 的面向对象特性 js是一门很强大的语言,灵活,方便. 目前我接触到的语言当中,从语法角度上讲,只有 Ruby 比它更爽. 不过我接触的动态 ...
- js中迭代元素特性与DOM中的DocumentFragment类型 笔记
JS中迭代元素特性 在需要将DOM结构序列化为XML或者HTML字符串时,多数都会涉及遍历元素的特性,这个时候attributes属性就可以派上用场. 以下代码展示了如何迭代元素的每一个特性,然后将他 ...
- 《JS权威指南学习总结--第三章类型、值和变量》
第三章 类型.值和变量 内容要点 一.数据类型 1.在编程语言中,能够表示并操作的值的类型称做数据类型 2.JS的数据类型分为两类: 原始类型:数字.字符串和布尔值 对象类型 3.JS中有两个特殊的原 ...
- JS判断时特殊值与boolean类型的转换
扒开JQuery以及其他一些JS框架源码,常常能看到下面这样的判断,写惯了C#高级语言语法的我,一直以来没能系统的理解透这段代码. var test; //do something... if(tes ...
- C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数
一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...
- Java语言中的面向对象特性总结
Java语言中的面向对象特性 (总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知 ...
随机推荐
- 数据模型LP32 ILP32 LP64 LLP64 ILP64
各个C++实现所选择采用的基础类型的大小统称为"数据模型".有四种广泛采用的数据模型: 32 位系统: LP32 或 2/4/4(int 为 16-bit,long 和指针为 32 ...
- 如何在MD(d)和MT(d)工程间正确分配和释放动态内存
MD(d)和MT(d) MD(d)和MT(d)是windows下VC开发的两个编译选项,表示程序的运行时库编译选项. /MT是"multithread, static version&quo ...
- jQuery中ajax方法无法执行回调函数问题
最近遇到一个问题,发现使用jquery的ajax方法时,回调方法无法执行,而使用$.load()方法时却能正确返回数据.经过长时间调试最终发现是自己粗心大意,原来后台返回的是json数据,而返回的数据 ...
- 在nuxt中加入element-ui插件遇到的问题
gen1.首先进入nuxt的官网跟着步骤实现内容. https://zh.nuxtjs.org/guide/plugins 2.在我们的项目目录中找plugin 根据图片中的表示引入内容: impor ...
- C语言描述队列的实现及操作(链表实现)
// 队列的单链表实现 // 头节点:哨兵作用,不存放数据,用来初始化队列时使队头队尾指向的地方 // 首节点:头节点后第一个节点,存放数据 #include<stdio.h> #incl ...
- Sagit.Framework For IOS 开发框架入门教程6:网络请求STHttp
前言: IOS的文章,今天,再来补一篇,Sagit的教程: 虽然感觉IOS的文章没什么观众,还是努力写吧,-_-〜 Sagit 开源地址:https://github.com/cyq1162/Sagi ...
- Docker深入浅出系列教程——Docker简介
我是架构师张飞洪,钻进浩瀚代码,十年有余,人不堪其累,吾不改其乐.如果你和我的看法不一样,请关注我的头条号,我们一起奇闻共赏,疑义相析. 本节属于入门简介,从三个小方面进行简单介绍Docker. Do ...
- Spring学习笔记(1)
激发pojo的潜能,不会让pojo类继承实现或导入与Spring API相关的任何东西 那么spring怎么装配pojo呢-------->依赖注入(最大好处:松耦合) 耦合具有两面性: 一方面 ...
- 项目Alpha冲刺Day4
一.会议照片 二.项目进展 1.今日安排 学习熟悉前台框架且搭建前台页面框架. 2.问题困难 使用了前端的构建工具webpack,困难在于怎么使用gradle结合它连同后台框架中的配置一起打包,因为本 ...
- 利用python实现简单邮件功能
#!/usr/bin/env python # -*- coding:utf-8 -*- import smtplib from email.utils import formataddr from ...