javascript - 喜欢/不喜欢超链接不能以面向对象的方式工作?
问题描述
我想要一个喜欢/不喜欢的超链接来在我的页面上显示不同的内容:点击“喜欢”时,显示“好”;单击“不喜欢”时,显示“不好”。我的代码是这样的:
<html>
<head>
<script>
function Homepage(){
this.like = document.getElementById("like");
this.dislike = document.getElementById("dislike");
Homepage.prototype = {
constructor: Homepage,
likeGame: function(event){
if(this.like.style.display == "none"){
this.like.style.display = "block";
}
event.preventDefault();
},
dislikeGame: function(event){
if(this.dislike.style.display == "none"){
this.dislike.style.display = "block";
}
event.preventDefault();
},
setListeners: function(){
console.log('in listen');
document.getElementById("hyperLike").addEventListener("click", this.likeGame);
document.getElementById("hyperDislike").addEventListener("click", this.dislikeGame);
}
}
}
</script>
</head>
<body>
<p style="display:block">
<a id="hyperLike" href="";>Like</a>/<a id="hyperDislike" href="";>Dislike</a> the game.
</p>
<p id="like" style="display:none">
good
</p>
<p id="dislike" style="display:none">
bad
</p>
<script>
var homepage = new Homepage();
window.onload = homepage.setListeners;
</script>
</body>
</html>
但是它不起作用。点击超链接没有反应。我添加console.log
了setListeners
,没有记录,所以它甚至没有进入setListeners
。这里有什么问题?
我有另一个非 OO 版本,它基本上是相同的代码,它可以工作。
解决方案
问题是函数this.like
内部和likeGame()
函数内部不一样this.like
,Homepage()
因为函数有自己的作用域。解决这个问题的一种方法是使用箭头函数作为方法。现在this
总会提到Homepage
。
function Homepage() {
this.like = document.getElementById("like");
this.dislike = document.getElementById("dislike");
this.likeGame = (event) => {
if (this.like.style.display == "none") {
this.dislike.style.display = "none"
this.like.style.display = "block";
}
event.preventDefault();
};
this.dislikeGame = (event) => {
if (this.dislike.style.display == "none") {
this.like.style.display = "none"
this.dislike.style.display = "block";
}
event.preventDefault();
};
this.setListeners = () => {
console.log('in listen');
document.getElementById("hyperLike").addEventListener("click", this.likeGame);
document.getElementById("hyperDislike").addEventListener("click", this.dislikeGame);
}
}
var homepage = new Homepage();
window.addEventListener("load", () => {
homepage.setListeners();
})
<html>
<body>
<p style="display:block">
<a id="hyperLike" href="">Like</a>/<a id="hyperDislike" href="" ;>Dislike</a> the game.
</p>
<p id="like" style="display:none">
good
</p>
<p id="dislike" style="display:none">
bad
</p>
</body>
</html>
推荐阅读
- function - Excel 2016:如何*通过键盘*从“建议”下拉列表中选择功能?
- google-cloud-platform - hdfs 相当于 snapdiff 和 Gcloud 中的createsnapshot
- azure-devops - Azure DevOps 连接到远程 Artifactory
- python - Python烧瓶应用程序抛出NoneType object is not subscriptable错误
- python - 如何使用networkx删除子图的最后一条边
- powerbi - Power Bi 不可理解的 Dax 公式
- jasmine - 错误:超时 - 异步函数未在 undefinedms 内完成
- java - 如何通过jamod读取控制器的输入状态?
- bloomberg - 勾选数据彭博
- python - 我不能 Conda 在 continuumio/anaconda3 Docker 容器中安装 Tesseract