codepen
点击按钮输出的是父组件的msg:hello,i am peiqi,在子组件里面this为什么会指向父级?
源码还没有了解到这里所以不太清楚
代码如下:
Vue.component('fff', {
template:`<div><sss :ff="sf"></sss></div>`,
data(){
return{
msg:'hello,i am peiqi'
}
},
methods:{
sf(){
console.log(this.msg)
}
}
})
Vue.component('sss', {
template:`<button @click="fn">sss</button>`,
props:{
ff:{
type: Function,
required: true
}
},
data(){
return{
msg:'你好,我是佩奇!'
}
},
methods:{
fn(){
this.ff()
}
}
// 选项
})
补充:8.10有答案说vue对this做了特殊处理
在我的codepen里面更改一下:
Vue.component('sss', {
template:`<div><button @click="fn">sss</button>
<button @click="test">test</button>
</div>`,
props:{
ff:{
type: Function,
required: true
}
},
data(){
return{
msg:'你好,我是佩奇!'
}
},
methods:{
fn(){
this.ff()
},
test(){
var obj={msg:'我是obj'}
this.fn.call(this)
this.fn.call(obj)
}
}
// 选项
})
确实用call也没法改变this的指向
猜想是不是可能用了bind如下:
a= {name:'z',fn:function(){
console.log(this.name)
}}
b={name:'p'}
a.fn.call(b)
a.fn=a.fn.bind(a)
a.fn.call(b)
// p
// z