目录
1.面向对象
面向过程:分析解决问题的需要的步骤,用函数依次实现,然后调用
面向对象:把事务分解为一个个对象,然后有对象之间分工合作
2. 面向对象
封装
继承
多态
3. 类和对象 class
//定义类
class Name {
constructor(name) {
this.name = name;
}
//定义方法,类里面的函数不要function
say(){
console.log('hello');
}
}
//创建类
var ldh = new Name('刘德华');
ldh = new Name();
console.log(ldh);
4. 继承 extends
super关键字,必须在子类构造方法里this之前调用
注意点:
1先定义类,才能创建对象。
2类属性方法一定要加this
3类this指的是实例对象
6. 创建对象几种方式
var obj = {};//对象字面量
var obj = new Obj();
function Person(name,age){
this.name = name;
this.age = age;
}
var obj = new Person('zs',12);
7. 实例成员 静态成员
实例成员:只能通过实例对象调用,通过this添加的属性
静态成员:通过类名赋值,类名调用访问
Star.sex = '男'
8. 构造函数的问题
构造函数里包含函数,如果创建多个实例对象,每个对象都会开启内存,浪费内存。
9. 构造函数原型prototype,构造函数问题的解决方法,用于共享方法。
function Star(uname, age) {
this.uname = uname;
this.age = age;
}
Star.prototype.sing = function(){
console.log('sing')
}
new Start('刘德华',18).sing();
10. 对象原型(proto)和构造函数(prototype)
(Star.prototype==ldh.__proto__)
// 如果我们修改原来的原型对象,给原型对象赋值的是个对象,则必须手动
//用 constructor 指向原来的构造函数
Star.prototype = {
constructor:Star,
sing:function(){},
movie:function(){}
}
11. ???对象原型和构造函数的关系
?? 原型链
constructor ---> new Star()
ldh.__proto__ --> Star.prototype
12. call 调用函数,修改this的指向
fn.call(obj,1,2) 默认指向fn,但是调用call后,指向了obj
13. ES5 新增方法
forEach
//数组元素,数组索引,当前数组
arr.forEach(function(value,index,arr){})
filter
//根据不同条件过滤数据
arr.filter(function(){})
arr.some(function(value,index,arr){
})
some
满足条件后,终止条件
foreach
foreach,遍历所有满足条件的数据
trim
去除首位空格
Object.keys
Object.keys(对象)
获取对象里属性名数组
var ret = Oject.keys(obj);
Object.defineProperty()
设置新的属性
14.严格模式 es5后 IE10以上
消除js语法一些不合理,不严谨之处。
消除代码一些不安全
提高编译器效率
为脚本开启严格模式和为函数开启严格模式
‘use strict’
15 严格模式的变化
变量必须先声明
不能删除变量
全局作用域 this 是undefined
构造函数不加new,this 会报错。
定时器this 还是window
函数里不允许重名参数
16 高阶函数
是对其他函数进行操作的函数,接收函数作为参数或者将函数作为返回值输出。
17 闭包 closure
有权访问另一个函数作用域的变量的函数
18 递归
19 正则表达式
20 ES6 新增方法
let
局部变量
const
常量
解构赋值:
把数据结构分解,然后给变量赋值
let [a, b, c] = [1, 2, 3];
console.log(a)//1
console.log(b)//2
console.log(c)//3
箭头函数:
() => {}
//():代表是函数; =>:必须要的符号,指向哪一个代码块;{}:函数体
var age = 100;
var obj = {
age: 20,
say: () => {
alert(this.age)
}
}
//箭头函数this指向的是被声明的作用域里面,
//而对象没有作用域的,所以箭头函数虽然在对象中被定义,但是this指向的是全局作用域
obj.say();
Array
扩展运算符
let arr = [1,2,3];
console.log(...arr); //打印数组里所有元素
Array.from()
find()
findIndex() 查询下标
includes() 判断数组包含指定的值,返回boolean
String
let name ="lisi";
let hell = 'this is ${name}';
Set 保证数据的唯一
const s = new Set();
//可以接受一个数组作为参数
const set = new Set([1,2,3,4,4]);
set.add(5);
set.delete(4);
set.has(3)
set.clear() 清除所有