JavaScript基础Day05:对象

2023-11-05

JavaScript基础Day05:对象

一、对象

​ JavaScript的对象是无序属性的集合。其属性可以包含基本值、对象或函数。对象就是一组没有顺序的值。我们可以把JavaScript中的对象想象成键值对,其中值可以是数据和函数。(特征—属性 行为—方法)

1. 创建对象

  • 通过系统的构造函数创建对象:var obj = new Object();
  • 自定义构造函数创建对象
  • 通过字面量创建对象

2. 自定义构造函数创建对象

  1. 申请空闲空间,存储创建的对象
  2. 把this设置为当前对象
  3. 设置对象的属性和值
  4. 把this这个对象返回
  • demo01:自定义构造函数创建对象
//自定义构造函数
function Person(name, age) {
    this.name = name;
    this.age = age;
    this.sayHi = function () {
        console.log(name + "," + age);  //haha,18
    }
}
var obj1 = new Person("haha", 18);  //创建对象
obj1.sayHi();
console.log(obj1 instanceof Person);    //true

3. 通过字面量创建对象

  • demo02:通过字面量创建对象
var obj1 = {};	//跟字面量创建数组一样的思路
obj1.name = "嘻嘻";
obj1.age = 18;
obj1.eat = function () {
    console.log(this.name + "在吃东西");    //嘻嘻在吃东西
};
obj1.eat();
  • demo03:优化字面量方法创建对象
var obj2 = {
    name: "哈哈",
    age: 20,
    eat: function () {
        console.log(this.name + "在吃东西");    //哈哈在吃东西
    }
};

4. new关键字

构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

  1. 构造函数用于创建一类对象,首字母要大写
  2. 构造函数要和new一起使用才有意义。

new在执行时会做四件事情:

new会在内存中创建一个新的空对象;
new会让this指向这个新的对象;
执行构造函数目的:给这个新对象加属性和方法;
new会返回这个新对象。

5. this关键字

  1. 函数在定义的时候this是不确定的,只有在调用的时候才可以确定
  2. 一般函数直接执行,内部this指向全局window
  3. 函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象
  4. 构造函数中的this其实是一个隐式对象,类似一个初始化的模型,所有方法和属性都挂载到了这个隐式对象身上,后续通过new关键字来调用,从而实现实例化

二、对象的使用

1. 获取属性(两种写法)

function Person(name, age) {	
    this.name = name;
    this.age = age;
    this.eat = function () {
        console.log("我来吃饭啦");
    }
}
  • 正常访问获取:对象.属性

var obj1 = new Person("哈哈", 18);
console.log(obj1.name);    //哈哈
console.log(obj1.age);     //18
obj1.eat();    //我来吃饭啦
  • 另一种写法:对象[“属性”]
var obj2 = new Person("嘻嘻");
obj2["age"] = 20;
console.log(obj2["name"]);  //嘻嘻
console.log(obj2["age"]);   //20
obj2["eat"]();  //我来吃饭啦

2. 遍历对象的属性:使用for-in语法

  • demo04:遍历对象的属性
var obj = {
    name: "哈哈",
    age: 20
};
for (var key in obj) {
    console.log(key+"--"+obj[key]);
}
//结果:
//  name--哈哈
//  age--20

3. 简单类型和复杂类型

基本类型又叫做值类型,复杂类型又叫做引用类型

值类型:简单数据类型,基本数据类型,在存储时,变量中存储的是值本身,因此叫做值类型。(存在与堆中)

引用类型:复杂数据类型,在存储是,变量中存储的仅仅是地址(引用),因此叫做引用数据类型。(对象存在于堆,地址存在于栈)

  • 堆和栈

    堆栈空间分配区别:
      1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
      2、堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放, 若程序员不释放,由垃圾回收机制回收,分配方式倒是类似于链表。
    
  • 注意:JavaScript中没有堆和栈的概念,此处我们用堆和栈来记录,目的方便理解和学习。

  • demo05:练习复杂类型
function Person(name, age, salary) {
    this.name = name;
    this.age = age;
    this.salary = salary;
}
function f1(person) {
    person.name = "ls";
    person = new Person("aa", 18, 10);
}
var p = new Person("zs", 18, 1000);
console.log(p.name);    //zs
f1(p);		//使用p对象作为参数传入函数f1中,person.name重新赋值为ls
console.log(p.name);    //ls
//1.
var num1 = 10;
var num2 = num1;
num1 = 20;
console.log(num1);  //20
console.log(num2);  //10

//2.
var num = 50;
function f1(num) {
    num = 60;
    console.log(num);   //60
}
f1(num);
console.log(num);   //50,函数中的num是参数传递,num=60是局部变量

//3.
var num1 = 55;
var num2 = 66;
function f1(num, num1) {
    num = 100;
    num1 = 100;
    num2 = 100;
    console.log(num);   //100
    console.log(num1);  //100
    console.log(num2);  //100
}
f1(num1, num2);
console.log(num1);  //55
console.log(num2);  //100
console.log(num);   //报错
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript基础Day05:对象 的相关文章

随机推荐

  • java反编译篇--miaow.Y.Hu

    好了 好久没更新了 今天来一篇关于java反编译的篇举例子 Java编译文件是指通过Java编译器将Java源代码文件 java文件 编译成字节码文件 class文件 的过程 在Java中 源代码文件包含人类可读的文本 而字节码文件是计算机
  • 常见分布的密度函数图像

    常见分布的密度函数图像 作者 凯鲁嘎吉 博客园 http www cnblogs com kailugaji 一 gamma分布 1 2 3 二 beta分布 1 a 1 2 b 1 3 三 卡方分布 四 t分布 五 F分布 1 n1 5
  • 垃圾分类小程序(含源码)

    前言 鉴于前期一段时间 自己接触小程序这块儿 根据当时的政策 随编写了垃圾分类小程序 在后期也做了很多的功能迭代 基本满足目前市面上的使用需求 期间也对当时垃圾分类的方案进行了简单汇总 可回收物 可回收物就是再生资源 指生活垃圾中未经污染
  • JDK1.8中关于HashMap的红黑树讲解

    一 首先需要了解以下几个问题 为什么要引入红黑数 特殊的平衡二叉树 数据结构 引入红黑树HashMap做了哪些改造 红黑树的特性 红黑树的具体实现方式 二 逐一解释以上三个问题 1 1 为什么要引入红黑数 特殊的平衡二叉树 数据结构 由于在
  • Matlab:如何读取并处理txt数据?

    Matlab 如何读取并处理txt数据 在Matlab中 读取和处理文本文件是非常常见的任务 txt文件是最常见的文本文件格式之一 可以包含各种类型的数据 此处介绍在Matlab中如何读取和处理txt文件 导入txt文件 Matlab提供了
  • cpp课程设计实验题:设计一个时间类Time,要求: (1)包含时(hour)、分(minute)和秒(second)私有数据成员。 (2)包含构造函数,重载关于一时间加上另一时间的加法运算符+、重载

    设计一个时间类Time 要求 1 包含时 hour 分 minute 和秒 second 私有数据成员 2 包含构造函数 重载关于一时间加上另一时间的加法运算符 重载关于一时间减去另一时间的减加运算符 重载输出运算符 lt lt 与输入运算
  • 基础算法题——younik吃大餐(多重背包)

    younik吃大餐 题目描述 Younik的检查结果出来了 核酸检测为阴性 她非常高兴 立刻决定去饭店大吃一顿 到了饭店 Younik看到琳琅满目的菜单 开始犯了选择困难症 这时作为顶级吃货的你恰好坐到了Younik的旁桌 你决定发扬一下雷
  • UE发起的PDU Session Establishment流程详解(2)

    相关文章会在公众号同步更新 公众号 5G通信大家学 持续更新的相关5G内容都是直接根据3GPP整理 保证更新内容的准确性 避免通过二手 甚至多手的资料 以讹传讹误导网友 在介绍完流程详解后 会整理专题内容 比如切片 服务发现 QoS流端到端
  • upload-labs 第6-20关

    upload labs关数6 20 第6关 第7关 第8关 第9关 第10关 第11关 第12关 第13关 第14关 第15关 第16关 第17关 第18关 第19关 这几关都是特殊的绕过检测方式 第6关 第六关其实没什么思路 就是对比了一
  • 高亮必填字段

    程序需求 必填字段高亮提示 为输入文本框添加一个高亮样式 input ng invalid background color rgb 255 255 51 input ng invalid required background color
  • 2023年第五届人工智能与机器学习国际会议(FAIML 2023)

    2023年第五届人工智能与机器学习国际会议 FAIML 2023 重要信息 会议网址 www faiml org 会议时间 2023年4月14 16日 召开地点 中国北京 截稿时间 2023年3月15日 录用通知 投稿后2周内 收录检索 E
  • 高德地图android sdk 地图显示和定位 基本使用方法

    首先 定位和地图是分开的 定位有定位的sdk 地图有地图的sdk 地图显示分为MapView和 AMap 两个类 MapView重写activity内的基本所有生命周期方法 Amap由mapview产生 aMap mapView getMa
  • 剑指Offer 04. 二维数组中的查找

    原题链接 思路 题目中说 每一行都是 从左向右递增的 在一个递增的序列中 查找某个数是否是存在的 二分即可 注意对边界进行判断 时间复杂度 O nlogn 代码 class Solution public boolean check int
  • 将windows按键修改成mac的快捷键

    下载工具autoHotKey AutoHotkey 使用autoHotKey 下载后创建一个脚本 ahk文件 将下面的进行粘贴 右键run script运行当前的脚本 ahk文件 就可以实现mac的快捷键了 a Send a 将 Alt A
  • Visual Studio build tools 安装出错的一种解决办法

    一般是安装包丢失或损坏 那么我么可以用离线下载的方式来先行下载 用 h 看下帮助 主要是Layout参数 下载完 到下载目录安装吧 转载于 https www cnblogs com jackadam p 8279199 html
  • 数据库系统 复习总结

    绪论 关系数据库 关系模型 完整性约束 关系运算 SQL语句 数据库安全 数据库安全性 数据库完整性 数据库设计 数据库设计概述与需求分析 函数依赖 无损连接验证算法 范式 关系模式分解 物理存储结构 磁盘容错技术 主索引 辅助索引 事务
  • 桥接模式-

    定义 也称为桥梁模式 接口模式或柄体模式 是将抽象部分与它的具体实现部分分离 使它们都可以独立地变化 适用场景 1 在抽象和具体实现之间需要增加更多的灵活性的场景 2 一个类存在两个 或多个 独立变化的维度 而这两个 或多个 维度都需要独立
  • 记一次Connection refused: no further information: localhost/127.0.0.1:6379的排错

    解决Redis connection refusd遇到的一个问题 错误描述 我做一个登陆界面时 把token令牌储存在Redis中 输入正确的账号密码时 在控制台显示如下错误 2020 01 31 14 20 34 DEBUG Connec
  • 2023年“网络安全”赛项浙江省金华市选拔赛 任务书

    2023年 网络安全 赛项浙江省金华市选拔赛 任务书 任务书 一 竞赛时间 共计3小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 任务二 Linux操作
  • JavaScript基础Day05:对象

    JavaScript基础Day05 对象 文章目录 JavaScript基础Day05 对象 一 对象 1 创建对象 2 自定义构造函数创建对象 3 通过字面量创建对象 4 new关键字 5 this关键字 二 对象的使用 1 获取属性 两