JS基础知识(七):对象、Math、Date

本文详细介绍了面向对象编程的基础概念,包括公有属性和方法、多种对象创建方式,重点讲解了原型链继承、构造函数与原型方法的结合。此外,深入剖析了Math对象和Date对象的使用,涵盖了创建、格式化和常用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、对象

1. 面向对象

1.1 面向对象的概念

早期程序面向过程,就是将过程拆分成不同的函数,但是需求变更时,函数的重用性差,每一次变更需要复杂的过程,因此出现了面向对象。

面向对象从另一个角度解决需求变更复杂性问题,将对象作为程序的基本单元。对象是对事物的抽象描述,具有数据和方法。
对象属性的访问:Object.name,Object[“name”]
对象方法的访问:Object.showName()

1.2 公有属性方法、私有属性方法

公有属性方法

属于这个类的所有对象都可访问的属性叫做公有属性,都可以访问的方法叫做公有方法。
不论是公有方法还是公有属性都是一个类型下所有实例对象都有的东西。
在这里插入图片描述图片来源于其他文章(地址忘记)

2. 对象创建

2.1 原始方法创建

创建 Object 类型有两种。一种是使用 new 运算符,一种是字面量表示法。

  1. 使用 new 运算符创建 Object
    var box=new Object(); //new 方式
    box.name=‘田雨飞’; //创建属性字段
  2. new 关键字可以省略
    var box=Object(); //省略了 new 关键字
  3. 使用字面量方式创建 Object
    var box={ //字面量方式
    name:’田雨飞’, //创建属性字段
    };
  4. 属性字段也可以使用字符串形式
    var box={
    ‘name’: ‘田雨飞’, //也可以用字符串形式
    ‘age’:28
    };
  5. 使用字面量及传统赋值方式
    var box={}; //字面量方式声明空的对象
    box.name=‘田雨飞’; //点符号给属性赋值
    box.age= 18;
  6. 两种属性输出方式
    alert(box.age); //点表示法输出
    alert(box[‘age’]); //中括号表示法输出,注意引号
    7.给对象创建方法
    var box={
    run:function(){//对象中的方法 return’运行}
    }
    alert(box.run()); //调用对象中的方法
  7. 使用 delete 删除对象属性
    delete box.name; //删除属性

不利于代码复用,多次创建对象,需要多行代码

2.1 工厂方法创建

在这里插入图片描述
左侧:与原始方法创建对象具有相同的问题,代码基本无法复用
右侧:代码复用率提高,但是每个对象的方法都是私有的,每个对象拥有各自的私有方法,占用内存

2.3 构造函数方法创建(不建议)

在这里插入图片描述
对象和函数不独立,占用内存

构造函数与普通函数区别:
构造函数也是一个普通函数,创建方式与普通函数一样,但是习惯函数名首字母大写

区别描述
调用方式不同普通函数直接调用person(),构造函数使用new关键字调用new Person()
作用不同普通函数是一种方法,构造函数用来创建对象
返回值不同普通函数没有返回值输出undefined,构造函数输出Object

构造函数的执行流程

  1. 立刻在堆内存中创建一个新的对象( var p1 = new Person(),var p2 = new Person(),p1,p2有不同的内存空间)
  2. 函数体内的this指向内存空间(this指向新对象)
  3. 逐个执行函数中的代码
  4. 将新建的对象作为返回值(返回this给p1,p1保存的内容就是内存空间的地址)

使用构造函数原因
使用对象字面量创建一系列同一类型的对象时,这些对象可能具有一些相似的特征(属性)和行为(方法),此时会产生很多重复的代码,而使用构造函数就可以实现代码复用

2.4 原型方法创建(不建议)

在这里插入图片描述
牵一发动全身

2.5 混合构造函数原型(常用)

在这里插入图片描述

2.6 动态原型方法(常用)

在这里插入图片描述
上述图片来源于其他文章,有些文章地址忘记了@_@
参考博客:https://blog.youkuaiyun.com/u010297791/article/details/55670841

3. 对象继承

3.1 原型链继承

子类原型等于父类的实例

在这里插入图片描述
缺点1:child的两个实例:man1,man2,如果man1的name值修改,man2的name值也会相应的改变。
缺点2:不能向父类构造函数传参

3.2 借用构造函数继承

在这里插入图片描述
A.apply(B):A申请——A的this指向B
new SuperPerson时,在堆中开辟内存空间,this指向该内存,运行函数,开始运行Person的构造函数,Person的this指向刚申请的堆内存

3.3 组合继承

在这里插入图片描述

3.4 原型继承

在这里插入图片描述
在这里插入图片描述

3.5 寄生式继承

在这里插入图片描述

3.6 寄生组合式继承

在这里插入图片描述
参考博客:https://www.cnblogs.com/bluey/p/4943323.html
参考博客:https://blog.youkuaiyun.com/qq_44162474/article/details/98489229

二、Math对象

Math对象用于执行数学任务
Math对象的常用函数
■Math.random() //返回0-1之间的随机数
■Math.max(num1, num2) //返回较大的数
■Math.min(num1, num2) //返回较小的数
■Math.abs(num) //绝对值
■Math.ceil(19.3) //向上取整
■Math.floor(11.8) //向下取整
■Math.pow(x,y) //x的y次方
■Math.sqrt(num) //开平方

三、Date对象

1. 日期对象

Date对象代表日期
类型使用自 UTC(Coordinated Universal Time,国际协调时间)1970 年 1 月 1 日午夜(零时)开始经过的毫秒数来保存日期。
Date 类型保存的日期能够精确到 1970 年 1 月 1 日之前或之后的 285616 年。

2. 创建日期对象

创建一个日期对象,使用 new 运算符和 Date 构造方法(构造函数)即可。
var d = new Date()
在调用 Date 构造方法而不传递参数的情况下,新建的对象自动获取当前的时间和日期。

创建日期对象并指定时间
var d = new Date(“2015/08/22”)
var d = new Date(2016,04,13,14,34)
【注】time可以是“2015/08/22”,“2015-08-22”,或1970年当前日期的毫秒数56521211021

3. 格式化方法

var d = new Date();
alert(d.toDateString()); //以特定的格式显示星期几、月、日和年
alert(d.toTimeString()); //以特定的格式显示时、分、秒和时区
alert(d.toLocaleDateString()); //以特定地区格式显示星期几、月、日和年
alert(d.toLocaleTimeString()); //以特定地区格式显示时、分、秒和时区
alert(d.toUTCString());//以特定的格式显示完整的 UTC 日期。

4. Date对象的方法

Date.parse("2015-08-24");
//返回距离1970年1月1日0时的毫秒数
//转换格式默认支持2015-08-24或2015/08/24
//set: 设置,get:获取
set/getDate()           //从Date对象中返回一个月中的某一天(1~31)
getDay()                //从Date对象返回一周中的某一天(0~6)
set/getMonth()          //从Date对象中返回月份(0~11)
set/getFullYear()       //从Date对象以四位数返回年份
set/getHours()          //返回Date对象的小时(0~23)
set/getMinutes()        //返回Date对象的分钟(0~59)
set/getSeconds()        //返回Date对象的秒数(0~59)
set/getMilliseconds()   //返回Date对象的毫秒
set/getTime()           //返回1970年1月1日至今的毫秒数
getTimezoneOffset()     //返回本地时间与格林威治标准时间(GMT)的分钟差
//set: 设置,get:获取
//getUTCDate:返回 Date 对象中用全球标准时间 (UTC)表示的日期值
//getDate:返回 Date 对象中用本地时间表示的一个月中的日期值
set/getUTCDate()        //根据世界时从Date对象返回月中的一天(1~31)
getUTCDay()             //根据世界时从Date对象返回周中的一天(0~6)
set/getUTCMonth()       //根据世界时从Date对象返回月份(0~11)
set/getUTCFullYear()    //根据世界时从Date对象返回四位年份
set/getUTCHours()       //根据世界时返回Date对象的小时(0~23)
set/getUTCMinutes()     //根据世界时返回Date对象的分钟(0~59)
set/getUTCSeconds()     //根据世界时返回Date对象的秒数(0~59)
set/getUTCMilliseconds()//根据世界时返回Date对象的毫秒(0~999)
toString()              //把Date对象转换为字符串
toTimeString()          //把Date对象的时间部分转换为字符串
toDateString()          //把Date对象的日期部分转换成字符串
toUTCString()           //根据世界时,把Date对象转换为字符串
toLocaleString()        //根据本地时间格式,把Date转换为字符串
toLocaleTimeString()    //根据本地时间格式,把Date时间部分转换为字符串
toLocaleDateString()    //根据本地时间格式,把Date对象的日期部分转换为字符串
UTC()                   //根据世界时返回1970年1月1日到指定日期的毫秒数
valueOf()               //返回Date对象的原始值

1、月份是从0-11,所以取得的值要加1才是当前月份
2、星期天是从0-6,0代表星期天

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值