美文网首页
基础面试3

基础面试3

作者: 乖乖果效36 | 来源:发表于2018-03-01 19:00 被阅读21次

    1.怎么理解es6箭头函数中的this,它和一般函数的this指向有什么区别呢?
    在箭头函数中没有自己的this,它的this继承自外部函数的作用域,它是固定的,在箭头函数中,函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象,箭头函数也有兼容问题,要是兼容低版本ie,需要使用babel编译,并且引入es5-shim.js才可以。
    在普通函数中,this指向windows窗口;在构造函数时,this指向实例化的对象;在事件中,this指向被触发的对象;在方法中,this指向调用方法的对象。
    在定时器中,方法是定义在window下的,this也是指向windows,可以在外部函数中将this存为一个变量,回调函数中使用该变量,而不是直接使用this,或者使用bind()方法,(call和apply是修改this指向后函数会立即执行,就失去了定时器的作用)而bind则是返回一个新的函数,它会创建一个与原来函数主体相同的新函数,新函数中的this指向传入的对象。
    2.vue如何解决跨域问题
    jsonp不能发post请求,不管是否跨域,只要用jsonp方式就只能是get,因为本质是script方式加载的;
    vue-resource的jsonp按照文档直接调就可以了;
    后端在respons header里设置Access-Control-Allow-Origin "",允许来自的跨域。
    3.vue路由实现及原理
    (1)导入并插入vue-router插件;
    (2)然后创建routers对象:在创建的 routers 对象中,传入的 routes 中的每一项即为一条路由(route)配置, path 配置路由的路径表示在匹配给定的地址,component 配置映射的组件用来渲染视图;
    (3)将 router 传入 new Vue() 用于创建根组件,并在组件模板中使用 <router-view> 来定义区域,这样根组件中对应的视图区域,可以基于 router 中的配置,根据页面地址显示不同的内容;
    (4)页面地址变更后,<router-view> 对应的区域会更新为地址匹配的组件。
    原理:本质上是从根组件中取出当前的路由对象(parent.$route),然后取得该路由下对应的组件,然后交由该组件进行渲染。
    vue-router 将自身作为一个插件安装到了 Vue,通过 Vue.mixin() 注册了一个 beforeCreate() 钩子函数,从而在之后所有的 Vue 组件创建时都会调用该钩子函数,从而检查 router 参数,进行初始化。监听到变化之后进行地址匹配,得到一个对应当前地址的 route,然后将其设置到对应的 vm._route 上。通过“数据劫持”,vm._route 的赋值会被 Vue 拦截到,并且触发 Vue 组件的更新渲染流程。当视图更新进一步调用到 <router-view>render() 时,即进入了 <router-view> 的处理。
    4.原型链
    所谓原型链,指的就是proto这一条指针链!
    原型链的顶层就是Object.prototype,而这个对象的是没有原型对象的。
    只有函数才有prototype属性,任何对象都有proto属性。
    proto可以理解为“构造器的原型”。
    当js引擎查找对象属性时,先查找对象本身是否具有该属性,没有的话会在原型链上找。
    只要是函数就有原型, 并且原型也是对象, 因此只要定义了一个函数, 那么就可以找到他的原型, 如此反复, 就可以构成一个对象的序列, 这个结构就被成为原型链。
    构造函数有prototype, 实例对象才有proto指向原型, 构造函数的原型才有 constructor 指向构造函数。

    相关文章

      网友评论

          本文标题:基础面试3

          本文链接:https://www.haomeiwen.com/subject/iqnwxftx.html