Javascript 为什么“this”有时在对象文本中是未定义的?

Javascript 为什么“this”有时在对象文本中是未定义的?,javascript,Javascript,浏览器错误 TypeError:这是未定义的 相关代码 // start of module $A.module({ Name: 'MUserNew', 您使用.bind()做的事情是正确的,但不幸的是此没有您期望的行为。它不接受对象文本中“进行中”对象的值。您必须创建对象,设置处理程序,然后将其传递给“模块”方法 您仍然可以在一个表达式中执行此操作,如下所示: $A.module(function() { var obj = { // ... ente

浏览器错误

  • TypeError:这是未定义的
相关代码

// start of module

$A.module({
    Name: 'MUserNew',


您使用
.bind()
做的事情是正确的,但不幸的是
没有您期望的行为。它不接受对象文本中“进行中”对象的值。您必须创建对象,设置处理程序,然后将其传递给“模块”方法

您仍然可以在一个表达式中执行此操作,如下所示:

$A.module(function() {
  var obj = {
    // ... 
    enterB: function(event) { ... },
    // ...
  };
  obj.enterB = obj.enterB.bind(obj);
  return obj;
}());
您需要在函数定义中使用
bind(this)
,如果
将定义此
(未定义)。需要调用该函数

/*MUserNew
**
**
**            
*/
$A.module({
    Name: 'MUserNew',
    // ....
    init: function () {
        this.enter = this.enter.bind(this);

@pure_代码我刚刚更新了答案,预计会有异议:-)@pure_代码代码会将一个对象传递给你的函数-仔细看看。传递给“module”函数的是调用该匿名函数的结果。匿名函数创建并返回对象。在任何情况下,“method”函数都无法说明传递给它的对象是如何创建的。它是一个函数表达式。通常,您会看到它们被括在括号中(如
(function(){…})(
或类似的内容),但只有当您的函数表达式是语句的开头时,才真正需要这样做。在这种情况下,它不是;但是,如果您想,可以将其括在括号中。它们不会伤害任何东西:-)@pure_code No-在匿名函数中,您将其绑定到所创建的对象变量。这就是为什么我将“obj”作为参数传递给
.bind()
@pure\u code哦,对了-这取决于代码运行的位置,但是是的,它要么是全局对象,要么是任何
这个
就是“$A.module()”调用运行的位置。是的,如果您的“module”代码调用“init”函数,这将很好地工作!
$A.module(function() {
  var obj = {
    // ... 
    enterB: function(event) { ... },
    // ...
  };
  obj.enterB = obj.enterB.bind(obj);
  return obj;
}());
/*MUserNew
**
**
**            
*/
$A.module({
    Name: 'MUserNew',
    // ....
    init: function () {
        this.enter = this.enter.bind(this);