Ecmascript 6 Vue原型MyModule并将范围设置为Vue

Ecmascript 6 Vue原型MyModule并将范围设置为Vue,ecmascript-6,vue.js,es6-modules,Ecmascript 6,Vue.js,Es6 Modules,当我将Vue扩展到 import api from '@/js/api' Vue.prototype.$api = api 在我的api中,如果我默认导出函数,我可以通过此访问Vue实例 //api.js import Vue from 'vue' export default function () { console.log('default export', this) //=> Vue } 我必须通过Vue.prototype.$api() 现在,我想扩展我的ap

当我将Vue扩展到

import api from '@/js/api'
Vue.prototype.$api = api
在我的api中,如果我
默认导出
函数,我可以通过
访问Vue实例

//api.js
import Vue from 'vue'

export default function () {
   console.log('default export', this)
   //=> Vue
}
我必须通过
Vue.prototype.$api()

现在,我想扩展我的api.js以包含多个函数和私有变量,而不必像使用axios库时那样将此作为对vue实例的引用

我希望能够在不丢失
this
上下文的情况下导出模块

var MyModule = {
    this.fn1 = function(){console.log(this) //=>Vue}
    this.fn1 = function(){console.log(this) //=>Vue}
}

我怎样才能做到这一点呢?

我发现这是不可能的


.then()
中的
上下文是通过箭头函数设置的

我发现这是不可能的


.then()
中的
上下文是通过箭头函数设置的

您应该避免编写这样的代码。在Axios中,我可以做
这个。$http.get('xxx')。然后(//this=>vue')
,这在vue中非常方便。我希望在我的api中也有这样的功能,这是很难推荐的。依赖动态
这个
是邪恶的,会导致糟糕的ES6 OOP代码。使用现有变量作为jQuery的名称空间是可行的,但在模块化环境中并没有理由这样做。如果您需要
api
,请导入它。您应该避免编写那样的代码。在Axios中,我可以执行
此操作。$http.get('xxx')。然后(//this=>vue')
,这在vue中非常方便。我希望在我的api中也有这样的功能,这是很难推荐的。依赖动态
这个
是邪恶的,会导致糟糕的ES6 OOP代码。使用现有变量作为jQuery的名称空间是可行的,但在模块化环境中并没有理由这样做。如果需要
api
,请导入它。