Javascript:如何使控件在方法中发送自身

Javascript:如何使控件在方法中发送自身,javascript,onclick,Javascript,Onclick,而不是: function SomeMethod(item) { item.setAttribute('name', item.id); } 愚蠢的例子,但想法不是发送id本身,而是实际控制调用方法。我发誓这是可以做到的,但我没有运气去寻找。。。部分原因是我甚至不知道该搜索什么 我以为是self,但self似乎不是我运行脚本时想要的东西。使用this关键字 function SomeMethod(itemId) { var someItem; someItem = documen

而不是:

function SomeMethod(item)
{
  item.setAttribute('name', item.id);
}
愚蠢的例子,但想法不是发送id本身,而是实际控制调用方法。我发誓这是可以做到的,但我没有运气去寻找。。。部分原因是我甚至不知道该搜索什么


我以为是self,但self似乎不是我运行脚本时想要的东西。

使用
this
关键字

function SomeMethod(itemId)
{
  var someItem;

  someItem = document.getElementById(itemId);
  someItem .setAttribute('name', someItem .id);

}

我倾向于在所有来自HTML属性的函数调用中使用这种方法:-

<a href="" id="someId" onclick="SomeMethod(this);"></a>
然后在javascript中执行以下操作:-

onclick="SomeMethod.call(this)"
当您还可以在Javascript代码中直接为事件处理程序属性赋值时,这具有明显的优势:-

function SomeMethod()
{
   this.setAttribute('name', this.id);
}
如果SomeMethod将上下文元素作为参数,则设置起来会非常困难:-

document.getElementById("someID").onclick = SomeMethod

更糟糕的是,这将是内存泄漏关闭。

您实际上不需要将此作为参数传递给函数,因为您有一个可以访问的单击事件对象。因此:

function(id) {
   var elem = document.getElementById(id)
   elem.onclick = function() { SomeMethod(elem); }
}("someID");

函数clickEventHandler(事件){
如果(!事件){
event=window.event;//IE使用的旧版本
//全球参考
//而不是争论。
};
var el=(event.target | | event.srcElement);//DOM使用'target';
//旧版本的
//IE使用“src元素”
el.setAttribute('name',el.id);
}


此时:
SomeMethod(this)
-
this
返回窗口对象,因此不要使用它。使用
这个
关键字的正确方法是使它与上下文相关,所以使用
SomeMethod.call(this)

我知道它很简单。问起来有点脏,但哦,好吧,优雅灵活的解决方案。
function(id) {
   var elem = document.getElementById(id)
   elem.onclick = function() { SomeMethod(elem); }
}("someID");
<a href="" id="someId" onclick="clickEventHandler()"></a>
<script>
function clickEventHandler(event) {

    if (!event) {
        event = window.event; // Older versions of IE use 
                              // a global reference 
                              // and not an argument.
    };

    var el = (event.target || event.srcElement); // DOM uses 'target';
                                                 // older versions of 
                                                 // IE use 'srcElement'
    el.setAttribute('name', el.id);

}
</script>