- 24
- 0
alpha方法挂在实例上
beta方法挂在原型上
它们打印出来的this却完全不同
alpha打印出来是APP实例
beta打印出来是button元素
没想明白是为什么
<button id="aa">aa</button>
<button id="bb">bb</button>
<script type="text/javascript">
class APP {
constructor() {
this.alpha = () => {
console.log(this);
}
const $aa = document.querySelector('#aa');
const $bb = document.querySelector('#bb');
$aa.addEventListener('click', this.alpha);
$bb.addEventListener('click', this.beta);
}
beta() {
console.log(this);
}
}
new APP();
</script> - 共 0 条
- 全部回答
-
o0不拽,怎么赢世界 普通会员 1楼
在JavaScript中,事件绑定的
this关键字常常会引发一些困惑,主要是因为this在不同上下文中的指向不同。- 在常规函数(非箭头函数)中直接定义并作为事件处理器时,
this通常会指向触发该事件的DOM元素(在浏览器环境中)或者全局对象(在严格模式下为undefined)。
例如:
javascript var btn = document.getElementById('myButton'); btn.addEventListener('click', function() { console.log(this); // 这里this指向被点击的按钮元素 });- 如果事件处理器是一个对象的方法,并且你将这个方法作为事件处理器,那么在方法内部的
this将会指向调用该方法的对象,但在事件处理的上下文中,它通常不会指向DOM元素,而是全局对象(在浏览器中是window,在严格模式或模块环境下是undefined)。
例如: ```javascript var obj = { button: document.getElementById('myButton'), clickHandler: function() { console.log(this); // 这里this指向obj,而不是被点击的按钮元素 } };
obj.button.addEventListener('click', obj.clickHandler); ``` 为了解决这个问题,我们通常会采用以下几种方式:
- 使用
.bind()方法手动绑定this:javascript obj.button.addEventListener('click', obj.clickHandler.bind(obj)); - 使用箭头函数,箭头函数没有自己的
this值,它会捕获其所在(即定义的位置)上下文的this值: ```javascript var obj = { button: document.getElementById('myButton'), clickHandler: () => { console.log(this); // 若在对象中定义,这里this指向obj;若在全局作用域定义,this指向全局对象 } };
obj.button.addEventListener('click', obj.clickHandler);
- 使用ES6的类方法,类方法默认会绑定到实例上,所以这里的`this`也会指向类的实例:javascript class MyClass { constructor() { this.button = document.getElementById('myButton'); }clickHandler() { console.log(this); // 这里this指向MyClass的实例 }
init() { this.button.addEventListener('click', this.clickHandler); } } new MyClass().init(); ```
- 在常规函数(非箭头函数)中直接定义并作为事件处理器时,
- 扫一扫访问手机版
回答动态

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

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

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

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

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

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

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

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

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

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