Javascript methods: this & that
Javascript methods: this & that
这里是第一个问题。
我正在尝试Javascript对象。这是我的代码:
function main(){
document.onkeydown = hero.keyListener;
hero.move();
hero.counter();
}
var hero = {
dx: undefined,
dy: undefined,
keyListener: function (e) {
this.dy = 100;
},
move: function () {
this.dx = 80;
},
counter: function() {
document.getElementById("dxcounter").innerHTML = "Dx: "+ this.dx + " Dy: "+ this.dy;
}
};
移动方法更新this.dx
但 keyListener 不会在按下某个键时更新this.dy
。
如果我像这样更改键侦听器,它可以工作:
keyListener: function (e) {
that = hero;
that.dy = 100;
},
为什么 move 方法适用于this
而不适用于 keyListener?
在 JavaScript 中,默认情况下this
不绑定到对象;它是通过上下文设置的。在这种情况下,this
将是 document
.解决此问题的一种方法是绑定函数,以便始终hero
this
:
document.onkeydown = hero.keyListener.bind(hero);
注意:bind
仅在较新的浏览器中可用。
JavaScript
中的this
运算符并不总是遵循您所期望的范围规则。
本文将有助于解释正在发生的事情:http://unschooled.org/2012/03/understanding-javascript-this/
相关文章:
- jquery点击函数select&取消选择
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- Angular js-返回一个包含类似
- 一点javascript元编程&可链接的设置器
- 通过JSON&比较时间
- Jquery模板,如果xx&&如果yy
- jQuery工具验证器自定义效果-添加&消除影响
- Twitter引导程序Typeahead-Id&标签
- AngularJS&JSON-从Previous&下一个对象
- 什么是&&在没有if的行中的变量之间
- 关于引入外部javascript文件的问题&css通过https
- 指令的模板必须只有一个根元素:With restrict E&替换true
- 使用ajax的服务器端分页&jQuery
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 如何使用dropzone&vueJs
- 如何准确执行加载脚本&退出弹出窗口
- 如何添加CSS&JavaScript进入Windows窗体应用程序C#.net
- Solr查询以按日期月份获取数据&年
- 显示&作为&在jsp中使用angularjs而不使用ng-bind-html
- 如何惯用地手动销毁scope&在AngularJS中重新创建