1

我不明白为什么我不能that.Friends.name在这里访问(见下面的代码):

更新

JS

function AClass(_Friends) {
  var that = this;
  this.Friends = _Friends;

  this.doSomething = function() {
    console.log(that.Friends.name); // Uncaught TypeError: Cannot read property 'name' of undefined 
  };
}

var A = new AClass({ name: 'toto' });
$('button').click(A.doSomething);

HTML

<button>TRY!</button>

var that = this在我的类的控制器上使用,因为我可能会对在回调中调用我的方法感兴趣(就像在这个例子中一样),我对此并不感到自豪,你有没有更好的方法让它工作(也许这是一个好主意你在这里重新定义this)?

4

2 回答 2

1

通过doSomething直接传递,您将其与对象分离。jQuery 或没有 jQuery,这将停止工作。

然而,为了明确地让它停止工作(如果这有任何意义的话),jQuery 强制将 的值设置this在处理程序中单击的元素。

要修复this(哈哈),您只需使用匿名函数;

$('button').click(function () {
    A.doSomething();
});

现在,匿名函数的值被强制为this,但我们真的不在乎,因为它是doSomething()我们感兴趣的值;其中,因为它仍然附加到A,并且没有通过callor强制apply,它是我们需要的值。

有了这个,就不需要var that = this; 尽管它是一种很好用的 JavaScript 习惯用法/技术,所以我自己不会担心。

于 2013-05-23T21:16:26.927 回答
1

Friends是外部范围内的局部变量;您可以直接访问它而无需使用that

console.log(Friends.name);
于 2013-05-23T21:16:35.647 回答