公共方法在调用时返回“不是函数”错误

时间:2018-09-23 22:20:08

标签: javascript oop

我正在尝试在课堂上调用this方法。当我这样做时,我收到一条错误消息:

  

未捕获的TypeError:this.logMe不是函数

我尝试删除this,但仍然出错。这是我的代码:

function Logger() {
    this.logMe = function() {
    console.log('Log a Message');
  };

  window.addEventListener('click', function() {
        this.logMe();
  });
}

var hello = new Logger();

我在做什么错,我该如何解决?

4 个答案:

答案 0 :(得分:1)

您的this用于匿名方法,而不是Logger

function() {
    // this is about this anonymous method instead of Logger
    this.logMe();
}

您可以尝试使用window.addEventListener('click', this.logMe);来达到期望。

function Logger() {
    this.logMe = function() {
    console.log('Log a Message');
  };

  window.addEventListener('click', this.logMe);
}

var hello = new Logger();

答案 1 :(得分:0)

另一种模式(传递一些消息可能很有意义):

var Logger = {
  log: function(msg) {
      if(typeof(msg) != 'undefined') {
          console.log(msg);
      }
  }
};

window.addEventListener('click', function() {
   Logger.log('Log a Message');
});

答案 2 :(得分:-1)

function Logger() {
    this.logMe = function() {
    console.log('Log a Message');
  };

  window.addEventListener('click', () => this.logMe(), false);
}

var hello = new Logger();

看看这个:https://hackernoon.com/javascript-es6-arrow-functions-and-lexical-this-f2a3e2a5e8c4

答案 3 :(得分:-2)

您需要删除 this ,它会按预期运行。

function Logger() {
  logMe = function() {
    console.log('Log a Message');
  };

  window.addEventListener('click', function() {
        logMe();
  });
}

var hello = new Logger();