1

这可能很难解释这一点。让我们看看这个:

<a onclick="jsFunction (1, 'a', function() { callback(this); }"></a>

回调需要知道<a>这个调用来自哪里。但是这个“这个”并不是我想要的那个“这个”。有一个小解决方法,我知道:

<a onclick="var _this = this; jsFunction (1, 'a', function() { callback(_this); }"></a>

但我觉得很不幸。有更好的解决方案吗?

4

3 回答 3

3

您可以使用bind做一些不那么尴尬的事情,但不会太多:

<a onclick="jsFunction (1, 'a', (function(){callback(this);}).bind(this))"></a>

这是通常最好不要在 HTML 中内联 javascript 代码的众多原因之一。

我通常更喜欢这样写:

<a id=someid></a>

<script>
    $('#someid').click(function(){
        var _this=this;
        jsFunction (1, 'a', function() { callback(_this); });
    });
</script>
于 2013-01-02T11:36:00.390 回答
1

我不知道您所说的“不幸”是什么意思,但这是一种完全有效且常见的做法。

另一种方法是使用bind方法:

function() { /* use this as usual here */ }.bind(this);

如果您想支持古老的浏览器,则必须为此使用其中一个“polyfills”(可从您的友好社区 Google 获得)

此外,请考虑不要将代码放入 HTML 中。它很快变得混乱。

于 2013-01-02T11:35:33.913 回答
0

当您进入真正的基于 OO 的语言(如 Java)的世界时,您会看到通过多态等不同的方式执行此操作,但即使在大多数情况下,您也完全按照您所做的那样,在更改为函数范围之前分配“this”。

“this”是我认为基于范围的关键字,因此分配像 objHandel=this 或类似的东西很好,因为它很有意义。“这个”会根据您所在的位置而变化。

无论哪种方式,我认为您的代码仍然有效且良好......如果您可以使用脚本语言,那么我认为您到目前为止非常幸运:p

~ 丹

于 2013-01-02T11:39:24.200 回答