gpt4 book ai didi

javascript - 以不同方式调用函数时 'this' 的值

转载 作者:行者123 更新时间:2023-11-30 18:38:04 28 4
gpt4 key购买 nike

在此页面上:https://developer.mozilla.org/en/DOM/element.addEventListener

当使用 addEventListener() 调用 modifyText() 函数时,this 的值会有所不同直接在 HTML 中使用 onclick='' 应用事件。在上面链接的页面中,请注意第一个示例(实际上是第二个),然后是标题为“处理程序中 this 的值”的以下部分。

我决定对此进行测试,但找不到任何区别。我做错了什么?

addeventlistener2.html:

<html>
<head>
<title>DOM Event Example 1</title>
<style type="text/css">
#t { border: 1px solid red }
#t1 { background-color: pink; }
</style>
<script type="text/javascript">

// Function to change the content of t2
function modifyText(new_text) {
var t2 = document.getElementById("t2");
t2.innerHTML = new_text + '<br />this: <b>' + this + '</b>';
}

// Function to add event listener to t
function load() {
var el = document.getElementById("t");
el.addEventListener("click", function(){modifyText("body onload")}, false);
}

</script>
</head>
<body onload="load();">

<p>has onload in body.</p>

<table id="t">
<tr><td id="t1">one</td></tr>
<tr><td id="t2">two</td></tr>
</table>

</body>
</html>

addeventlistener2.html:

<html>
<head>
<title>DOM Event Example 2</title>
<style type="text/css">
#t { border: 1px solid red }
#t1 { background-color: pink; }
</style>
<script type="text/javascript">

// Function to change the content of t2
function modifyText(new_text) {
var t2 = document.getElementById("t2");
t2.innerHTML = new_text + '<br />this: <b>' + this + '</b>';
}

</script>
</head>
<body>

<p>has onclick in table:</p>

<table id="t" onclick='modifyText("boo!")'>
<tr><td id="t1">one</td></tr>
<tr><td id="t2">two</td></tr>
</table>

</body>
</html>

最佳答案

在 addEventListener 示例中,您将 modifyText 包装在另一个函数中。所有的 this 魔法都会发生在那个外部函数上,而 modifyText 将看不到它。

尝试将 modifyText 直接传递给 addEventListener

node.addEventListener('click', modifyText);
//and make sure to change modifyText to receive no parameters or it wont work :)

如果您仍然希望能够选择参数,则可以使用闭包的强大功能:

function modifyText(new_text) {
return function(){
var t2 = document.getElementById("t2");
t2.innerHTML = new_text + '<br />this: <b>' + this + '</b>';
};
}

//addEventListener(modifyText('txt'))
//versus
//onclick=modifyText('txt')()

关于javascript - 以不同方式调用函数时 'this' 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668379/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com