gpt4 book ai didi

javascript - 当没有参数时,为什么vue计算函数可以破坏参数的分配?

转载 作者:行者123 更新时间:2023-12-03 06:45:08 25 4
gpt4 key购买 nike

new Vue({
el: "#app",
data: {
value: "text",
},
computed:{
all: function({value}){
return value
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
{{ value }}
<br>
{{ all }}
</div>

在Vue文档上没有看到此用法。
但是我在项目中看到了这一点,为什么可以使用这种用法?
   computed:{
all: function({value}){
return value
}
}
首先,我认为当函数没有得到参数时,将“this”作为参数。见下文。
但是是错误的。那么为什么计算没有得到参数,对参数进行解构分配仍然有效?

var value = "couldn't fly";
function ref ({value}){
console.log(value)
}

ref({
value : "could fly"
})

// didn't get window
try{
ref();
}catch(e){
console.log('error')
}


// ===================================================


class cal {
constructor(){
value : "couldn't walk"
}
ref({value}){
console.log(value, "in Class")
}
}

let calRef = new cal;
calRef.ref({
value: "could walk"
})


// didn't get the constructor value
try{
calRef.ref()
}catch(e){
console.log('error')
}

最佳答案

这记录在API guide ...

Note that if you use an arrow function with a computed property, this won’t be the component’s instance, but you can still access the instance as the function’s first argument



new Vue({
el: "#app",
data: {
value: "text",
},
computed: {
all (vm) {
console.log('from all, is vm equal to this?', vm === this)
return vm.value
},
arrowed: vm => vm.value.toUpperCase(),
destructuredArrow: ({ value }) => value.toUpperCase()
}
});
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script>

<div id="app">
<pre>value = {{ value }}</pre>
<pre>all = {{ all }}</pre>
<pre>arrowed = {{ arrowed }}</pre>
<pre>destructuredArrow = {{ destructuredArrow }}</pre>
</div>


刚刚发现了一个方便的额外提示...同样的模式也适用于组件的 data函数
export default {
props: { someProp: String },
data: vm => ({ localCopy: vm.someProp })
}

关于javascript - 当没有参数时,为什么vue计算函数可以破坏参数的分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63463321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com