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:


非常感谢事件的
。事件处理程序方法中的
指的是被单击的对象。使用类似var
self=myObject的东西然后使用
self
而不是
this
事件处理程序方法中的
引用正在单击的对象。使用类似var
self=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的最新添加,在较旧的浏览器中不起作用。可能重复:可能重复: