某赞面经+答案

1. 画一下原型链? prototype和__proto__有什么区别
摘自《红宝书》

2. BFC是什么?有哪几种实现方式?适用场景?
摘自:《精通CSS第三版》,3.2.8节
块级格式化上下文规则(BFC),这个规则规定了 1.页面必须自动包含突出的浮动元素2. 所有块级盒子的左边界默认与包含块的左边界对齐。
实现方式:-1 display属性值设置为inline-block或table-cell等的元素,可以为内容创建类似块级的上下文;-2 float属性值不是none的元素;-3 绝对定位的元素;-4 overflow属性值不是visible的元素;
当一个元素具备了触发新块级格式化上下文的条件,并且挨着一个浮动元素时,它就会忽略自己的边界必须接触自己的包含块边界的规则。此时,这个元素会收缩到适当大小,不仅行盒子如此,所有盒子都如此。

3. this指向?如何改变?
1. 使用箭头函数;
2. 在函数内部使用_this=this;
3. 使用apply、call、bind
4. new实例化一个对象;
在非严格模式下,如果如果函数没有用作构造函数,而是仅仅作为普通函数使用的话,那么函数中的this是指向window的。在严格模式下,this的值就是undefined。
4. 垂直水平居中有哪些方法
方法1:子绝父相,子盒子top、left都50%,再margin-top、-left都是50%的盒子宽高;
方法2:子绝父相,子盒子top、left都50%,用transform: translate(-50%,-50%);;
方法3:flex布局;
方法4:给绝对定位,left、right、top、bottom都给0,margin给auto;方法5:使用table-cell;
5. new实现(摘自红宝书P145)
1. 创建一个新对象;var obj = {};
2. 将构造函数的作用域赋给新对象(用新对象的隐式原型指向构造函数的显式原型obj.__proto__ = ClassA.prototype;,用call改变this指向ClassA.call(obj););
3. 执行构造函数中的代码(为这个新函数添加属性);
4. 返回新对象;
6. 清除浮动有哪些方法(摘自CSS权威指南10.1节、精通CSS 3.2.7)
子盒子浮动导致的父盒子内高度为 0 ,父级盒子不能被撑开,发生高度塌陷的情况。
清除浮动的方法:
1. 给父盒子设置合适的高度;
2. 给父盒子添加样式 overflow:hidden/auto;(这个属性相当于触发BFC,让父级紧贴内容,包括使用了浮动的盒子)
3. 在父盒子里面的子盒子后面添加一个子盒子,如div,添加样式 .clear{ clear:both; };
4. 采用伪元素,给父元素追加:after,给父元素添加一个类.clearfix{content:"";clear:both;}
7. data为什么要用return?(摘自vue官方中文文档)
vue的data必须声明为返回一个函数的形式,是因为组件会被用来创建多个实例对象,如果data只是一个纯粹的对象,会导致所有的实例共享、引用同一个数据对象。通过data函数,使得每次创建新实例,调用data函数,返回初始数据的全新副本对象。
8. vue中的定时器,一般在哪个生命周期中清除
在beforeDestroy()里面清除定时器,clearInterval(this.timer);this.timer = null;
9. vue双向绑定?只知道Object.defineProperty不够
10. 父子传值?vuex、bus,知道eventbus吗?
11. vue生命周期有哪些?destroy用过吗?
12. vuex请求?原理?
13. 手写代码实现一个eventbus。分别实现三种方法listen监听、trigger触发、remove移除