VueJS:为什么“这个”未定义?
IT技术
javascript
vue.js
this
vuejs2
2021-01-10 23:06:11
4个回答
这两个示例都使用箭头函数 () => { }
,它绑定this
到与 Vue 实例不同的上下文。
根据文档:
不要在实例属性或回调(例如
vm.$watch('a', newVal => this.myMethod())
)上使用箭头函数。由于箭头函数绑定到父上下文,this
因此不会像您期望的那样是 Vue 实例并且this.myMethod
将是未定义的。
为了获得this
作为 Vue 实例的正确引用,请使用常规函数:
mounted: function () {
console.log(this);
}
或者,您也可以对函数使用ECMAScript 5 速记:
mounted() {
console.log(this);
}
您正在使用箭头函数。
该Vue的文件中明确规定不能在属性或回调使用箭头功能。
与常规函数不同,箭头函数不绑定this
。相反,this
在词法上是绑定的(即this
保留其原始上下文的含义)。
var instance = new Vue({
el:'#instance',
data:{
valueOfThis:null
},
created: ()=>{
console.log(this)
}
});
这会在控制台中记录以下对象:
Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
而...如果我们使用常规函数(我们应该在 Vue 实例上使用)
var instance = new Vue({
el:'#instance',
data:{
valueOfThis:null
},
created: function(){
console.log(this)
}
});
在控制台中记录以下对象:
hn {_uid: 0, _isVue: true, $options: {…}, _renderProxy: hn, _self: hn, …}
如果您想继续使用箭头函数,您可以将组件实例 ( this
) 作为参数传递,如:
computed: {
foo: (vm) => { //vm refers to this
return vm.bar + 1;
}
}
如果你想使用this
.你不能使用箭头功能。因为箭头函数没有绑定this
。