- 22
- 0
在平时对setTimeout addEventListener这种函数的使用,都会传入一个匿名的callback函数
如:
1.
window.setTimeout(function() {
console.log(this)
}, 1000)
或者
2.
var el = document.getElementById('wrapper')
el.addEventListener('click', function() {
console.log(this)
}, false)
上述情况1中this会指向setTimeout函数的caller -> window对象
而情况2中this也会指向addEventListener函数的caller -> wrapper这个对象
但是我自己类似于window.setTimeout这样创建了一个对象
var a = {
b: 'b in a',
c: function (callback) {
callback()
}
}
//调用a对象的c函数,传入匿名函数作为参数
a.c(function() {
//本以为this是指向a的,会输出字符串'b in a',实际此时this指向window
console.log(this.b)
})
我原本以为会类似于window.setTimeout el.addEventListener那样,this会指向.(点号)之前的对象。
然后我改了一下对象a
var a = {
b: 'b in a',
c: function (callback) {
callback.bind(this)()
}
}
这个时候this才指向a。
那么问题来了:
1.像这种匿名函数传参的用法,为什么使用我自己定义的对象和浏览器提供的api产生的效果不一样呢?这种类型的this的指向应该如何更好的理解?
2.是不是像setTimeout 、addEventListener这种系统api,它的内部实现就帮我们去把this bind给了调用这个方法的对象,如setTimeout中就有callback.bind(window)和addEventListener就有callback.bind(el)?
有没有各路大神可以解答一下,小弟感激不尽。
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

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

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

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

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

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

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

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

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

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

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