前端面试每日3+2(第14天)
冰洋 12/15/2019 每日3+2
当你发现自己的才华撑不起你的野心时,就请安静下来学习吧!
鲁迅说过:
答案仅供参考...
# 1、ECMAScript对象的继承结构?
解析:
继承的规律:
- 对象继承的终点是object.prototype
- 所有函数默认显示的原型(即函数的prototype)都继承Object.prototype
- 谁的实例,这个实例就继承谁的prototype:函数继承自Function.prototype;数组继承自Array.prototype;正则继承自RegExp.prototype等等。。。 拓展:原型链
# 2、什么是事件冒泡/捕获?
解析:
事件冒泡:子元素事件触发会影响父元素。
从当前触发的事件目标一级一级往上传递,依次触发,直到document为止。
举个例子,我敲击了键盘,同时也敲击了电脑
开启:addEventListener第三个参数设置为false开启事件冒泡,默认就是事件冒泡
addEventListener回调函数内的event.target是真正点击的那个元素;this指向的addEventListener前面绑定的那个元素。
事件捕获:父元素事件会影响子元素事件。
从document开始触发,一级一级往下传递,依次触发,直到真正的事件目标为止。
开启方式:addEventListener第三个参数设置为true开启事件捕获
应用:比如给1000个li标签添加点击事件,可以for循环挨个添加,但是效率地下,可以通过事件捕获,给父盒子ul自己添加事件,由于事件捕获,给父盒子绑定点击事件,子盒子也都绑定了点击事件。
addEventListener回调函数内的event.target是真正点击的那个元素;this指向的addEventListener前面绑定的那个元素。
# 3、如何阻止事件冒泡和默认事件?
解析:
阻止事件冒泡
function stopBubble(e){
if(e&&e.stopPropagation){
e.stopPropagation()// 非ie
}else{
//ie
window.event.cancelBubble = true
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
阻止默认事件
function stopDefault(){
if(e&&e.preventDefault){
// w3c 阻止浏览器默认行为
e.preventDefault();
}else{
// ie中阻止函数器默认动作的方法
window.event.returnValue = false;
}
// return false // 或者
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 4、面向对象和类的区别?
解析:
对象的概念:
- 面向对象编程的程序实际就是多个对象的集合,可以把所有对象都抽象成对象,
- 在程序设计中可以看作:对象=属性+方法。
- 属性就是对象的数据,方法就是对象的行为
类的概念
- 类是对象的模版,对象是类的实例化
- 举例:汽车设计图可以看作是类,具体的汽车就是对象
- 用一个类表示人,可以通过人这个模版实例化张三李四等
类是对象的模版。
在js中没有类,js中所谓的类就是构造函数,对象就是构造函数创造出来的实例对象。
面向对象就是使用面向对象的方式处理问题,面向对象是面向过程进行封装。
面向对象的三大特点:封装、继承、多态
# 5、for in循环的特点和使用场景?
解析:
- 可以遍历对象和数组
- 遍历数组索引会自动递增加一。
- 任意顺序遍历一个对象的除Symbol以外的可枚举的属性
- 继承的属性也会遍历,可以通过hasOwnProperty()过滤