我无法理解为什么我在这里无法访问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
这里)?
答案 0 :(得分:1)
直接传递doSomething
,您将其从对象中分离出来。 jQuery或没有jQuery,这将停止工作。
然而,肯定让它停止工作(如果这有意义),jQuery强制this
的值成为在处理程序中单击的元素
要修复this
(哈哈),您只需要使用匿名函数;
$('button').click(function () {
A.doSomething();
});
现在,匿名函数的值被强制转换为this
,但我们真的不在乎,因为它是我们感兴趣的doSomething()
的值;因为它仍然附加到A
,并且没有被强制通过call
或apply
,它就是我们需要的值。
有了这个,就不需要var that = this
;虽然它是一个很好用的JavaScript成语/技术,所以我自己也不用担心。
答案 1 :(得分:1)
Friends
是外部作用域中的局部变量;您无需使用that
即可直接访问它:
console.log(Friends.name);