阅读 175

8.19 记一次面试

考点

  • promise(考察执行顺序, promise then可以一直then原理, 怎么处理thenable对象的)
  • 不同角色分配不同权限实现(动态路由, addRoutes, 前端先定义好不同用户的动态路由列表, 登录时候根据后台返回标记匹配)
  • 路由懒加载使用方法( () => import(‘xxx.vue)),这样做的好处
  • 动态组件(使用< component :is=props > 实现一个a标签)
  • Render函数的使用, 可接收参数的意思
  • Vue生命周期created可以做什么事情
  • Vue项目优化, 可以从代码层面到webpack配置层面说
  • webpack分包, url-loader的作用
  • Async await 和 promise的关系
  • 你知道vfor中加key的作用吗
  • 说说高阶组件slot , 作用和场景
  • Vue的mixin如何使用,好处是啥,需要注意的点
  • Babel转译es6 Class语法后的代码是长啥样的,我想在低版本ie用数组的includes方法怎么办
  • Instanceof 的作用, 为什么尽量不使用来判断类型
  • New的过程
  • 箭头函数的特性
  • 项目中遇到的难点,如何攻克

new的过程

/**
 * 
 * @param {<function>} fn 构造函数
 * @param  {...any} args 构造函数可以接受参数
 */
function myNew (fn, ...args) {
    var obj = {};
    obj.__proto__ = fn.prototype;
    var ret = fn.call(obj, ...args);
    return typeof ret === 'function' || (typeof ret === 'object' && ret !== null) ? ret : obj;
}
New的过程:
1. 创建一个空对象,
2. 对象的__proto__连接到构造函数的prototype
3. 执行构造函数, this指向空对象
4. 处理边缘情况,返回值

var Person = function (name, age) {
this.name = name;
this.age = age;   
};
myNew(Person, 'biubiu', 10) // {name: 'biubiu', age: 10};
复制代码

instanceof

/**
 * 
 * @param {*} left 
 * @param {*} right 
 */
instanceof : 意思是left的原型链上是否能找到right的prototype属性, 用来检测类型是不建议使用的, 不严谨
[] instanceof Array => true;
[] instanceof Object => true;
function myInstanceof (left, right) {
    var isFind = false;
    var proto = left.__proto__;
    var prototype = right.prototype;
    while (proto !== null) {
        if (proto !== prototype) {
            proto = proto.__proto__;
        } else {
            isFind = true;
            break;
        }
    }
    return isFind;
}

关于使用es5严格检测数据类型
var type = type => data => type === Object.prototype.toString.call(data).slice(8, -1);
var util = {
    isArray: type('Array'),
    isNumber: type('Number'),
    isString: type('String'),
    isObject: type('Object'),
    isPromise: type('Promise'),
    isSymbol: type('Symbol'),
    isNull: type('Null'),
    isUndefined: type('Undefined'),
    isFunction: type('Function')
}
util.isFunction(Function) // true;
复制代码

At last, wish all happy interview, happy offer!!