1. new关键字的作用
-
创建一个空对象
-
this指向这个对象
-
对象赋值
-
返回这个对象
2. 构造函数,原型对象,实例对象的关系
1.构造函数有一个属性prototype,指向自己的原型对象
2.实例对象有一个属性__proto__指向自己的原型对象
3.原型对象有一个属性constructor,指向自己的构造函数
3. js语言是通过什么技术实现面向对象继承的
是通过原型链继承的
4. 原型链终点是什么
1.终点是null
5. for-in与for-of区别
1.功能不同
for-in是遍历数组的下标
for-of是遍历数组的元素
2.原型的属性
for-in会遍历原型的属性
for-of不会遍历原型的属性
3.数据类型
for-in可以遍历Object类型
for-of不可以遍历Object类型
6. this : 谁调用我,我就指向谁
1.全局函数 : this指向window
2.对象方法 : this指向对象
3.构造函数 : this指向new创建的空对象
7. call,apply,bind区别
-
相同点:
都可以改变函数内部的this指向
-
区别点:
call和apply会调用函数,并且改变函数内部this指向
call和apply传递的参数不一样, call传递参数aru1, aru2...形式apply必须数组形式[arg]
bind不会调用函数,可以改变函数内部this指向
-
主要应用场景
call调用函数并且可以传递参数
apply经常跟数组有关系,比如借助于数学对象实现数组最大值最小值
bind不调用函数,但是改变this指向比如改变定时器内部this的指向
简介来说:
-
call和apply传参方式不同
-
call,apply和bind执行机制不同
8. 什么是闭包:以下两种回答都可以'
1.闭包是一个访问其他函数内部变量的函数
2.闭包是 函数 + 上下文引用组合
简单来说: 内层函数访问外层函数的变量的组合就是闭包
闭包作用: 解决变量污染
9. 什么是递归:
函数内部调用自己
递归场景: 1.深拷贝 2.遍历dom树