Heim > Fragen und Antworten > Hauptteil
Sehen Sie sich das einfache Komponentenbeispiel in Vue 3 unten an:
<script> import { defineComponent } from 'vue' export default defineComponent({ name: 'Test', setup(){ return{ one, two } } }) function one(){ console.log(this) //<-- Proxy{} two() } function two(){ console.log(this) //<-- undefined } </script> <template> <a href="#" @click.prevent="one()">开始</a> </template>
Ich versuche zu verstehen, warum one()
函数调用two()
函数时,this
在two()
函数中是undefined
。两个函数都在setup()
中返回,所以我期望它们都能访问this
.
Aber wie wäre es mit einem Zitat in two()
函数中获取对组件实例this
?
P粉7764125972023-11-07 00:01:40
我想Vue仍然需要遵守JavaScript的规则。当事件处理程序被调用时,通常是在接收事件的对象的上下文中。在这种情况下,one()
被绑定到<a>
元素的Proxy
,并且this
绑定到Proxy
。
然而,two()
被特别地调用没有上下文(即:two()
而不是someobject.foo()
)。这意味着this
将是未定义的。
我对Vue不是非常熟悉,但我想它不会自动绑定方法,这样就不需要你为你不使用的东西付费。
由于one()
中this
已正确绑定,你实际上可以将two()
作为this
的方法调用,而不是作为裸函数调用:
<script> import { defineComponent } from 'vue' export default defineComponent({ name: 'Test', setup(){ return{ one, two } } }) function one(){ console.log(this) //<-- Proxy{} this.two() } function two(){ console.log(this) //<-- Proxy{} } </script> <template> <a href="#" @click.prevent="one()">开始</a> </template>