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

来自为知笔记(Wiz)

时间: 2024-10-07 14:36:13

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

JS面向对象高级特性

本篇是通过学习视频<一头扎进javascirpt高级篇>整理的一些相关知识,大致包括下面几个方面: 1 对象的创建方法 2 对象的对象属性.私有属性.类属性 3 对象的对象方法.私有方法.类方法 4 javascirpt的继承.封装.与多态 对象的创建方法: 对象的创建可以通过两种方式,第一种通过对象初始化的方法: var person={ name:"xingoo", age:26, say:function(){ console.log("say someth

js 面向对象的基本概念和基本使用方法

js 面向对象的基本概念和基本使用方法 -> js 是不是一个面向对象的语言? 不是:与传统面向对象的理论语言有矛盾.C#,Java. 是:js里面到处都是对象,数组,时间,正则- 和 DOM.也可以像传统面向对象的语言那样用 new 的方式创建对象 -> js是一个基于对象的多范式编程语言. 面向过程的方式 面向对象的方式 函数式 递归与链式 例: Jquery 链式编程 面向对象的概念 对象的定义:无序属性的集合,其属性可以包含基本值,对象或是函数 1. 面向:将脸朝向- -> 关注

1.1 js 面向对象的基本概念和基本使用方法

js 面向对象的基本概念和基本使用方法 -> js 是不是一个面向对象的语言? 说不是:因为与传统面向对象的理论语言有矛盾.C#,Java. 说是:因为js里面到处都是对象,数组,时间,正则- 和 DOM.也可以像传统面向对象的语言那样用 new 的方式创建对象 -> 其实js是一个基于对象的多范式编程语言.  面向过程的方式 面向对象的方式 函数式 递归与链式 例: Jquery 链式编程 面向对象的概念 对象的定义:无序属性的集合,其属性可以包含基本值,对象或是函数 1. 面向:将脸朝向-

2017.11.11 复合类型

2.3 复合类型 2.3.1 引用 引用就是为对象起了个别名,引用类型引用另外一种类型.通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名. int ival =1024; int &refVal= ival;          // refVal 指向ival (是ival 的另一个名字) 2.3.2 指针 指针是"指向"另外一种类型的复合类型.与引用不同,第一,指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针生命周期内它可以先后指向几个不同的对象.

复合类型

复合类型(compound type)是指基于其他类型定义的类型,C++语言有几种复合类型,这里只介绍两种:引用和指针 一:引用 引用(reference)为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名. int ival = 1024 int &refval = ival://refval指向ival(是ival的另外一个名字) int &refval2:  //报错,引用必须初始化 一般在初始化变量的时候,初始值

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

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/a6qIB7SqOlc/优酷:http://v.youku.com/v_show/id_

js面向对象编程:如何检测对象类型

在js中检测对象类型主要有三种,typeof,instanceof,constructor,这几种都可以检测对象的类型,但又有一定的区别.   1使用typeof检测对象类型. typeo作为最常用的检测类型的方法,返回字符串类型,具体使用如下: function testType(value) { var str=typeof(value); // alert(str); switch(str) { case 'undefined': // undefined类型 case 'object'

JS面向对象篇一、理解对象及属性特性(属性描述符)

本文内容 1.理解对象; 2.ECMAScript有两种属性类型:数据属性和访问器属性(getter和setter函数); 3.数据属性的属性特性:[[Configurable]].[[Enumerable]].[[Writable]].[[value]]; 4.访问器属性的属性特性:[[Configurable]].[[Enumerable]].[[get]].[[set]]; 5.Object.defineProperty().Object.defineProperties().Object

JavaScript基础--面向对象三大特性(八):继承封装多态

一.构造函数基本用法:function 类名(参数列表){属性=参数值} 1 function Person(name,age){ 2 this.name = name; 3 this.age = age; 4 } 5 6 //创建Person对象的时候,可以直接给名字和年龄 7 var p1 = new Person('abc',80); 8 window.alert(p1.name); 9 var p2 = new Person('hello',9); 10 window.alert(p2.