一.箭头函数
- 函数的简写
// 箭头函数是匿名函数,一般做为参数传递
// let test = function (a,b){
// let sum = a + b
// return sum
// }
// let test = (参数) => {函数体}
// 几个小细节
// 1.如果函数体只有一句,那么可以省略{},同时默认会返回函数体的结果,不能写return
// 2.如果只有一个参数,那么可以省略()
// 3.如果没有参数,()也不能省略
// let test = (a,b) => a + b // 不能有大括号
let test = a => a + 10
let res = test(100)
console.log(res)
二.常用数组方法
1.every( )------->检测数值元素的每个元素是否都符合条件。
2.filter( )------->检测数值元素,并返回符合条件所有元素的数组。
3.find( )------->返回符合传入测试(函数)条件的数组元素。
4.findlndex( )------->返回符合传入测试(函数)条件的数组元素索引。
5.forEach( )------->数组每个元素都执行一次回调函数。
6.includes( )------->判断一个数组是否包含一个指定的值。
7.indexOf( )------->搜索数组中的元素,并返回它所在的位置。
8.isArray( )------->判断对象是否为数组。
9.join( )------->把数组的所有元素放入一个字符串。
10.map( )------->通过指定函数处理数组的每个元素,并返回处理后的数组。
11.reduce( )------->将数组元素计算为一个值(从左到右)。
12.reverse( )------->反转数组的元素顺序。
13.some( )------->检测数组元素中是否有元素符合指定条件。
14.sort( )------->对数组的元素进行排序。
三.面向对象
1.作用:
- 一种编程行业通用的写
项目级
的代码的思维,引导我们如何编写高质量的代码,万物皆对象 - 看待事物的角度,(属性:数据,行为:动作(方法))。代码特点是封装和继承
2.对象在内存中的示意图:
四.创建对象的几种方式
1.字面量
-
不适合创建多个同样类型的对象的场景
const obj ={ name:"悟空",height:100,age:5000};2.
2.工厂函数
- 容易理解
- 失去
血缘关系
,无法简单分辨对象的特征 - 后期无法实现继承
function createPerson(name, age, height) {
return {
name: name,
age: age,
height: height
}
}
function createStudent(name, age, height, grade) {
return {
name1: name,
age1: age,
height1: height,
grade: grade
}
}
// 这个不是工厂模式
function createStudent2(name, age, height, grade) {
this.name = name;
this.age = age;
this.height = height;
this.grade = grade;
}
const obj1 = createPerson("八戒", 18, 500);
const obj2 = createStudent("悟能", 83, 231, 3);
const obj3 = new createStudent2("悟能", 83, 231, 3);
console.log(obj1);
console.log(obj2);
console.log(obj3);
3.构造函数
-
可以方便的创建对象
-
拥有血缘关系
-
还有后续更多的优势
// 1 声明函数
function createStudent(name, age) {
// 2 通过 this 赋值
this.name = name;
this.age = age;
}
// 3 通过 new 来创建对象
const obj = new createStudent("悟能", 83);
console.log(obj);
4.小结: 笔试题比较常见
构造函数的工作原理:
- 开辟空间
- 将新的创建的对象对象结构函数中的this
- 为对象赋值
- 将创建好的对象的地址返回
5.构造函数的弊端
1.同一个 say
方法占据了两份内存
function createStudent(name, age) {
this.name = name;
this.age = age;
this.say = function () {
console.log(this.name);
}
}
const obj = new createStudent("悟能", 83);
const obj1 = new createStudent("悟能1", 84);
console.log(obj.say === obj1.say); // false 不是同一say方法 浪费了内存
2.图示
6.提取同一个 say
方法
1.解决了浪费内存的弊端
2.但是造成了 污染全局变量 的问题
// 提前将say 声明好
function say() {
// 污染全局变量
console.log(this.name);
}
function createStudent(name, age) {
this.name = name;
this.age = age;
this.say = say
}
const obj = new createStudent("悟能", 83);
const obj1 = new createStudent("悟能1", 84);
console.log(obj.say === obj1.say); // true
3.图示
7.原型模式
在构造函数的原型上 存放函数
-
解决了同一个
say
浪费 内存的问题 -
解决了污染全局变量的问题
function createStudent(name, age) { this.name = name; this.age = age; } // 将刚才的全局函数say 直接挂载到 构造函数的原型上 即可 // prototype 是个对象 每一个构造函数都会内置有的. 我们称之为原型 createStudent.prototype.say = function () { console.log(this