前端面试每日3+2(第14天)

12/15/2019 每日3+2

当你发现自己的才华撑不起你的野心时,就请安静下来学习吧!

鲁迅说过:答案仅供参考...

# 1、ECMAScript对象的继承结构?

解析:

继承的规律:

  1. 对象继承的终点是object.prototype
  2. 所有函数默认显示的原型(即函数的prototype)都继承Object.prototype
  3. 谁的实例,这个实例就继承谁的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

阻止默认事件

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

# 4、面向对象和类的区别?

解析:

对象的概念:

  1. 面向对象编程的程序实际就是多个对象的集合,可以把所有对象都抽象成对象,
  2. 在程序设计中可以看作:对象=属性+方法。
  3. 属性就是对象的数据,方法就是对象的行为

类的概念

  1. 类是对象的模版,对象是类的实例化
  2. 举例:汽车设计图可以看作是类,具体的汽车就是对象
  3. 用一个类表示人,可以通过人这个模版实例化张三李四等

类是对象的模版。
在js中没有类,js中所谓的类就是构造函数,对象就是构造函数创造出来的实例对象。
面向对象就是使用面向对象的方式处理问题,面向对象是面向过程进行封装。
面向对象的三大特点:封装、继承、多态

# 5、for in循环的特点和使用场景?

解析:

  1. 可以遍历对象和数组
  2. 遍历数组索引会自动递增加一。
  3. 任意顺序遍历一个对象的除Symbol以外的可枚举的属性
  4. 继承的属性也会遍历,可以通过hasOwnProperty()过滤
Last Updated: 1/14/2020, 7:56:38 AM
    asphyxia
    逆时针向