# 什么是对象
对象只是一种特殊的数据类型。对象是一组无序的相关属性和方法组成。
* 属性:事物的特征,对象里的属性就是用来表现该对象具备哪些特征
* 方法:事物的行为,对象里的方法用来表示该对象具备哪些行为
# 创建对象的三种方式
* 利用字面量创建对象
* 利用new Object创建对象
* 利用构造函数创建对象
```
//第一种创建对象的方法
varobj = {}//创建的空对象
varobj = {
name:"编程语言",
age:18,
sex:"男",
wechat:"biancheng",
fun:function(){
console.log("使用微信小程序编程");
}
}
console.log(obj.name);
console.log(obj.fun());
//第二种创建对象的方法
var obj = new Object();//创建空对象
obj.name = "编程语言";
obj.age = 18;
obj.fun = function(){
console.log("微信小程序编程")
}
console.log(obj)
obj.fun()
//第三种创建对象的方法
function Person(name,age,sex,wechat){
this.name = name;
this.age = age;
this.sex = sex;
this.wechat = wechat;
this.fun =function(log){
console.log(log)
}
}
var obj = newPerson("编程语言",18,"男","biancheng");
console.log(obj);
obj.fun("使用微信小程序编程");
```
# new关键字的执行过程
通过构造函数new一个对象
```
function Person(name,age) { //创建构造函数Person
this.name = name;
this.age = age;
this.action = function (jineng) {
console.log(name + "具备" + jineng + "的技能")
}
}
//创建对象1
var obj1 = new Person('编程语言', 18)
```
这里在new一个对象出来时会执行下面四件事
* 在电脑内存中创建一个空对象
* 让构造函数里的this指向一个新的对象
* 执行构造函数里的代码,给这个新对象添加属性和方法
* 返回新对象
# 对象的使用
*****
## **1.访问对象的属性**
对象属性的调用语法有两种
* 对象名.属性名
* 对象名['属性名']
```
//访问对象的属性
var obj = {
name:"编程语言",
age:18
}
console.log(obj.name)
console.log(obj['name'])
```
## **2.访问对象的方法**
对象中的方法调用就一种方式:对象名.方法名()
```
var obj = {
name: '编程语言',
age: 18,
code:function(){console.log("对象的方法")}
}
// obj.code() 就是直接调用obj对象里的code()方法
```
# 内置对象
****
内置对象就是指JavaScript自带的一些对象,供开发者使用,这些对象提供了一些常用的功能。开发者可以很方便的使用这些内置对象,不需要关心这些内置对象的实现原理。
常见的内置对象如:Math、Array、Date等
常用的学习文档如下:
* MDN [官方地址](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript)
* W3cschool [官方地址](https://www.w3school.com.cn/js/index.asp)
* 菜鸟教材 [官方地址](https://www.runoob.com/js/js-tutorial.html)
#### **内置对象随机数**
Math.random() 得到一个大于等于0 小于1之间的随机数;多使用抽奖场景
* 获取两数之间的随机数 (大于等于min小于max)
```
//生成的可能是小数也可能是整数
Math.random() * (max - min) + min
console.log(Math.random()* (10-1) +1)
//获取随机整数
//加载页面触发事件
onLoad:function(){
//console.log(this.data.list)
//console.log(Math.PI)
console.log(this.getRandomInt(1,100))
},
//
getRandomInt(min,max){
min\=Math.ceil(min);
max\=Math.floor(max);
//不包括最大值,包含最小值
returnMath.floor(Math.random() \* (max\-min) +min);
}
```
## Date日期对象
Date对象是一个构造函数对象,必须使用new对象来创建需要使用的对象后才能使用。
创建日期对象的四种方法
```
new Date()
new Date(year, month, day, hours, minutes, seconds, milliseconds)
new Date(dateString)
new Date(milliseconds)
```
### **获取日期的方法**
| 方法 | 描述 |
| --- | --- |
| getDate() | 以数值返回天(1-31) |
| getDay() | 以数值获取周名(0-6) |
| getFullYear() | 获取四位的年(yyyy) |
| getHours() | 获取小时(0-23) |
| getMilliseconds() | 获取毫秒(0-999) |
| getMinutes() | 获取分(0-59) |
| getMonth() | 获取月(0-11) |
| getSeconds() | 获取秒(0-59) |
| getTime() | 获取时间(从1970年1月1日至今) |
```
var date = new Date();
console.log(date.getTime()) //返回1619074784197 从1970年1月1日到现在的时间差,单位毫秒
console.log(date.getFullYear()) //2021
console.log(date.getDay()) //4
console.log(date.getHours()) //15
console.log(date.getMilliseconds()) //202
console.log(date.getMinutes()) //202
console.log(date.getMonth()) //3 获取的月份是从0开始所有获取的是上个月
console.log(date.getSeconds()) //50
var ymd = date.getFullYear() +'年'+ (date.getMonth()+1) +'月'+date.getDate() +'日';
var his = date.getHours() +'时'+date.getMinutes() +'分'+date.getSeconds() +'秒';
console.log(ymd,his); //2021年4月22日 15时24分55秒
```
### **日期设置方法**
| 方法 | 描述 |
| --- | --- |
| setDate() | 以数值(1-31)设置日 |
| setFullYear() | 设置年(可选月和日) |
| setHours() | 设置小时(0-23) |
| setMilliseconds() | 设置毫秒(0-999) |
| setMinutes() | 设置分(0-59) |
| setMonth() | 设置月(0-11) |
| setSeconds() | 设置秒(0-59) |
| setTime() | 设置时间(从1970年1月1日至今的毫秒数) |
```
//设置日期
var date = new Date();
date.setFullYear(2022);
console.log(date.getFullYear());//2022
```
### **倒计时案例**
```
var dateNow = new Date(); //现在的时间
var dateEnd = newDate('2021-04-22 18:00:00'); //设置下午六点为结束时间
var time = dateEnd.getTime() - dateNow.getTime(); //现在的时间到结束时间的毫秒数
var minutes = Math.ceil(time/60000); //现在的时间到结束时间的分钟数(1000毫秒=1秒)
var info = parseInt(time/1000/60/60%24) +'小时'+parseInt(time/1000/60%60) +'分'+Math.ceil(time/1000%60) +'秒';
console.log(dateNow); //Thu Apr 22 2021 16:12:58 GMT+0800 (中国标准时间)
console.log(info); //1小时47分2秒
```