看了别人代码,产生了ajax传参数可以this.属性吗这个疑问?如果是或者不是,那为什么?

我在看别人写的代码,有一个地方不懂,原图:
图片描述图片描述!图片描述

现在我想这样写:如下图对比图3:
图片描述
图片描述

阅读 2.4k
4 个回答

参数这里可以这样写,因为没有涉及到闭包问题,建议楼主去看一下闭包的原理与实践和this的指向问题就明白这样写的作用了。

普通函数中,this 指向自己,箭头函数 this 指向包裹层,如果你想在 ajax 的回调函数中直接用 this,需要把函数写成箭头函数:

$ajax.xxx(params, res => {
    this.xxx; // 这里的 this 指向外层,可以直接访问 vm 实例
})
  1. 首先vue下的method默认帮你执行了 Function#bind 方法,所以方法下的 this 就固定为 Vue 的实例了,因此可以使用 this 来获取实例下的属性。
  2. 你在 promise 的 then 写了一个普通函数,普通函数内部的 this 指向和函数的执行环境有关系,他在 promise 链中执行,this 的指向当然不是 Vue 实例
  3. 如果你想用 this 而不是 _this 这种保存引用的方式,使用箭头函数即可,因为箭头函数没有 this ,在函数体内使用 this 用的就是外层的 this ,也就是 Vue 实例。

let _this = this;
这段代码其实就是为了拿到上下文的this。
如果你想直接使用this,请使用箭头函数。
可以参考这篇博客

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题