Javascript:将“this”作为“dom”对象传递,而不将“this”作为“this”函数传递

时间:2013-01-02 11:34:15

标签: javascript jquery

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

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

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

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

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

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

我不知道“不幸”是什么意思,但这是一种非常有效和常见的做法。

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

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

如果你想支持古老的浏览器,你必须使用其中一个“polyfill”(可以从友好的邻居谷歌获得)

另外,请考虑不将代码放入HTML中。它变得很乱。

答案 2 :(得分:0)

当你进入真正的基于面向对象的语言(如Java)的世界时,你会看到以不同的方式对多态性等做这种方式,但即便如此,在大多数情况下你完全按照你的方式做,在更改为函数之前指定“this”范围。

“this”是一个基于我认为的范围的关键字,所以分配类似objHandel = this或类似的东西很好,因为它是有道理的。 “这个”会根据你所处的位置而改变。

无论哪种方式,我认为你的代码仍然有效......并且如果你有它,那么用脚本语言然后我认为你很幸运:p

〜丹