无法访问此方案中的特定变量

时间:2013-05-23 21:13:46

标签: javascript

我无法理解为什么我在这里无法访问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,因为我可以在回调时调用我的方法很有意思(比如在这个例子中),我对此并不感到自豪,你有没有更好的方法来制作它有效(也许这是一个好主意te重新定义this这里)?

2 个答案:

答案 0 :(得分:1)

直接传递doSomething,您将其从对象中分离出来。 jQuery或没有jQuery,这将停止工作。

然而,肯定让它停止工作(如果这有意义),jQuery强制this的值成为在处理程序中单击的元素

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

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

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

有了这个,就不需要var that = this;虽然它是一个很好用的JavaScript成语/技术,所以我自己也不用担心。

答案 1 :(得分:1)

Friends是外部作用域中的局部变量;您无需使用that即可直接访问它:

console.log(Friends.name);