- 27
- 0
在vue的data里面 new对象 绑定这个对象的方法 this 指向为null
我在vue 外写了一个类写了一些自定义方法,
我不想在methods新加多余的函数 如何解决。。
<div id="app">
<div class="a" @click="mouse.click"></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
class mouse {
constructor() {
this.a = 0
}
click(e) {
console.log(this)
//这里打印出来是null
}
}
var app = new Vue({
el: '#app',
data() {
return {
mouse: new mouse()
}
}
})
</script> - 共 0 条
- 全部回答
-
曳白 普通会员 1楼
在Vue.js中,当你在数据的
data属性中创建一个新对象,并将其绑定到数据源this指针上时,如果你试图访问this指针,但实际上它指向的是创建新对象时的指针,而不是当前正在操作的对象的指针。这可能会导致一些奇怪的行为,例如: 1. 错误的this指针访问:如果你在this指针上绑定一个方法,尝试在方法调用时访问this指针,这将导致 Vue 库中的错误。这是因为this指针在新对象被创建后将指向this指针,而不是当前对象的指针。例如:javascript data() { let obj = new Object(); obj.name = 'John'; obj.sayHello = function() { console.log(this.name); // 输出: John }; return obj; },在上面的代码中,this指针在创建obj对象后将指向this指针,因此尝试访问this.name的调用将返回undefined,因为this指针此时指向obj对象,而不是当前对象的指针。 2. 错误的this指针访问:如果你尝试在方法内部访问this指针,这通常会导致运行时错误。例如:javascript data() { let obj = new Object(); obj.name = 'John'; obj.sayHello = function() { this.name = 'Alice'; }; return obj; },在上面的代码中,尝试在sayHello方法内部访问this.name的调用将导致运行时错误,因为this指针在创建obj对象后将指向this指针,而不是当前对象的指针。如果你尝试在方法内部访问this,而不是在方法外部,它将正常工作,因为在 Vue 中,方法是通过this指针来访问的,因此不会导致运行时错误。 为了避免这些问题,你可以考虑以下几种方法:-
使用箭头函数或 ES6 的
this关键字来重写方法:javascript data() { let obj = new Object(); obj.name = 'John'; obj.sayHello = (this.name) => { console.log(this.name); // 输出: Alice }; return obj; },在上面的代码中,我们使用箭头函数或 ES6 的this关键字来重写sayHello方法,使this指针在方法调用时指向obj对象的name属性。 -
使用
setThis方法:javascript data() { let obj = new Object(); obj.name = 'John'; obj.sayHello = () => { this.setThis('Alice'); }; return obj; },在上面的代码中,我们使用setThis方法来重写sayHello方法,将this指针设置为obj对象的name属性。 -
使用箭头函数的
this关键字调用方法:javascript data() { let obj = new Object(); obj.name = 'John'; obj.sayHello = (this.name) => { console.log(this.name); // 输出: Alice }; obj.sayHello(); // 输出: Alice }在上面的代码中,我们使用箭头函数的this关键字调用sayHello方法,使得this指针在方法调用时指向obj对象的name属性,而不是当前对象的指针。
通过使用上述方法,你可以正确地访问和操作
this指针,避免出现上述问题。例如:javascript data() { let obj = new Object(); obj.name = 'John'; obj.sayHello = (this.name) => { console.log(this.name); // 输出: Alice }; obj.sayHello(); // 输出: Alice obj.sayHello(); // 输出: Alice }这样,你可以在方法调用时正确地访问和操作this指针,确保它指向obj对象。 -
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
