1、面向对象 面向过程
面向过程是分析出解决问题所需要的步骤,案后一步一步解决。
面向对象是把事情分成一个一个对象,对象之间分工合作实现需求。三个特性:继承性、封装性、多态性。
2、严格模式
(1)严格模式下全局作用域中函数的this是undefined
(2)在全局作用域函数中this指向window对象
(3)以前构造函数时不加new也可以调用,当普通函数,this指向全局对象
(4)严格模式下,如果构造函数不加new调用,this会报错
(5)new实例化的构造函数指向创建的对象实例
(6)定时器this还是指向window
(7)事件、对象还是指向调用者
3、什么是实例属性?什么是静态属性?
实例属性挂载到实例化对象身上。静态属性直接挂载到静态函数上。
(1)promise的静态属性
Promise.all
Promise.race
Promise.reject
Promise.resolve
(2)super的作用
super把父类的属性继承过来并把子类构造函数的this指向实例化对象
super.sing()子类可以调用父类的方法
4、new的步骤
(1)内存中创建一个空对象
(2)将这个空对象的proto成员指向了构造函数对象的prototype成员对象
(3)将构造函数对象this指针替换成空对象,然后再调用构造函数,于是构造函数的this就指向了新的空对象,并且会往实例化对象身上挂载方法
(4)返回实例化对象
5、什么是原型链
6、继承(实例属性、原型方法)
(1)在子类函数里面调用父类方法并改变this指向
Parent.call(this)
bind可以改变this指向,返回的是新的 拷贝的函数
call改变this指向,返回修改this指向的函数
apply
(2)把实例化对象的propto指向构造函数的prototype,再把父的构造函数的proptotype通过object.create传入
Object.create的作用
首先可以创建一个空对象,创建出来的空对象的proto属性指向传入的函数
<script>
function Parent(){
this.name='hh'
}
Parent.prototype.sing=function(){
console.log('uuuuuuuu');
}
function Child(){
Parent.call(this)
}
Child.prototype=Object.create(Parent.prototype)
Child.prototype.getAge=function(){}
Child.prototype.constructor=Child
const child=new Child()
console.log(child);
</script>
7、数组方法
8、object.defineProperty
9、高阶函数--函数作为参数传递或者函数作为另一个函数的返回值
(1)函数是词法作用域,可以访问的参数与函数定义位置有关,和调用无关
(2)闭包
(3)递归
(4)浅拷贝和深拷贝
10、let const
都是块级作用域,都不存在变量提升、当是简单数据类型时,不可以更改,当时复杂数据类型时,在不改变地址的情况下const可以修改值
11、箭头函数
12、set构造函数
git地址