Javascript 对象,但在使用事件侦听器时不使用
为什么Javascript 对象,但在使用事件侦听器时不使用,javascript,html,oop,Javascript,Html,Oop,为什么this没有引用对象myObject 当我执行console.log时(this)返回undefined。。。为什么? Javascript: 非常感谢事件的。事件处理程序方法中的指的是被单击的对象。使用类似varself=myObject的东西然后使用self而不是this事件处理程序方法中的引用正在单击的对象。使用类似varself=myObject的东西
this
没有引用对象myObject
当我执行console.log时(this)
返回undefined
。。。为什么?
Javascript:
非常感谢事件的
。事件处理程序方法中的指的是被单击的对象。使用类似varself=myObject的东西编码>然后使用self
而不是this
事件处理程序方法中的引用正在单击的对象。使用类似varself=myObject的东西然后使用self
而不是this
您需要将this
绑定到对象的正确上下文。实现这一点的常用方法是将本地this
的引用分配给init函数中的另一个变量:
init: function (){
var that = this;
this.button.addEventListener('click', function(e) {that.clickHandler(e)}, false);
}
您需要将此
绑定到对象的正确上下文。实现这一点的常用方法是将本地this
的引用分配给init函数中的另一个变量:
init: function (){
var that = this;
this.button.addEventListener('click', function(e) {that.clickHandler(e)}, false);
}
调用this.clickHandler()
会将this
设置为对象。但是,您只是将该函数传递给addEventListener
,浏览器在调用该函数时将设置一个自定义此
值
如果要绑定当前this
值,请使用this.clickHandler.bind(this)
。bind
返回的函数也将接收“错误的”此
值,但它使用绑定的、正确的此
值调用clickHandler
。调用this.clickHandler()
会将此
设置为对象。但是,您只是将该函数传递给addEventListener
,浏览器在调用该函数时将设置一个自定义此
值
如果要绑定当前this
值,请使用this.clickHandler.bind(this)
。bind
返回的函数也会收到“错误的”此值,但它会使用绑定的、正确的此值调用clickHandler
。首先只需将“this”用于单击处理程序
clickHandler: function(e) {
console.log(this);
this.productView();
e.preventDefault();
}
那么你有几个选择。这里有两个
选项A:
init: function (){
var o = this;
this.button.addEventListener('click', function(e){
o.clickHandler(e);
}, false);
}
init: function (){
this.button.addEventListener('click', this.clickHandler.bind(this), false);
}
选项B:
init: function (){
var o = this;
this.button.addEventListener('click', function(e){
o.clickHandler(e);
}, false);
}
init: function (){
this.button.addEventListener('click', this.clickHandler.bind(this), false);
}
我问了一个关于这些选项中哪一个更可取的相关问题:首先只需将“this”用于您的点击处理程序
clickHandler: function(e) {
console.log(this);
this.productView();
e.preventDefault();
}
那么你有几个选择。这里有两个
选项A:
init: function (){
var o = this;
this.button.addEventListener('click', function(e){
o.clickHandler(e);
}, false);
}
init: function (){
this.button.addEventListener('click', this.clickHandler.bind(this), false);
}
选项B:
init: function (){
var o = this;
this.button.addEventListener('click', function(e){
o.clickHandler(e);
}, false);
}
init: function (){
this.button.addEventListener('click', this.clickHandler.bind(this), false);
}
我问了一个相关的问题,关于这些选项中哪一个更可取:函数#绑定
是ECMAScript的最新添加,在较旧的浏览器中不起作用。函数#绑定
是ECMAScript的最新添加,在较旧的浏览器中不起作用。可能重复:可能重复: