为什么`this`有时在对象文字中未定义?

时间:2013-01-19 21:14:55

标签: javascript

浏览器错误

  • TypeError:这是未定义的

相关代码

// start of module

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

...

    enter: (function (event) {
        var pipe = {};
        if (event.keyCode === 13) {
            pipe = $A.definePipe(this.Name); // **fail here**
            $A.machine(pipe);
        }
    }).bind(this),

...

        // inside module as well
        this.E.un_go.addEventListener("keypress", 
                                       this.enterB, 
                                       false);

2 个答案:

答案 0 :(得分:4)

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

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

$A.module(function() {
  var obj = {
    // ... 
    enterB: function(event) { ... },
    // ...
  };
  obj.enterB = obj.enterB.bind(obj);
  return obj;
}());

答案 1 :(得分:1)

您需要在函数定义中使用bind(this)this将被定义(未定义)。需要调用该函数。

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