这可能很难解释这一点。让我们看看:
<a onclick="jsFunction (1, 'a', function() { callback(this); }"></a>
回调需要知道此调用来自的<a>
。但这个“这个”并不是我想要的“这个”。
我知道有一点解决方法:
<a onclick="var _this = this; jsFunction (1, 'a', function() { callback(_this); }"></a>
但我觉得不走运。有更好的解决方案吗?
答案 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
〜丹