javascript - 代码 1 不起作用,但另一个是。第一个代码有什么问题?
问题描述
我正在尝试学习javascript。对于我的一生,我无法说出下面我的目标代码有什么问题。我收到一条错误消息:
this.signIn 不是函数
let socialAppFunctions = {
displayNewsFeed: function () {
let socialPostsSection = document.querySelector("#socialPosts");
newsFeed.forEach(function (posts) {
let socialPosts = document.createElement("h4");
socialPosts.textContent = posts;
socialPostsSection.appendChild(socialPosts);
});
},
loginButton: function () {
let loginButton = document.querySelector("#loginButton");
loginButton.addEventListener("click", function() {
let userName = document.querySelector("#user");
let passWord = document.querySelector("#pass");
this.signIn(userName.value, passWord.value);
});
},
signIn: function (username, password) {
if (this.userValidation(username, password)) {
this.displayNewsFeed();
} else {
alert("Please check username and password");
}
},
userValidation: function (username, password) {
for (let i = 0; i < database.length; i++) {
if (database[i].username === username && database[i].password === password) {
return true;
}
}
return false;
}
};
socialAppFunctions.loginButton();
如果我不将它们作为一个对象放在里面,则下面的这个可以工作:
function signIn (username, password) {
if (userValidation(username, password)) {
displayNewsFeed();
} else {
alert("Please check username and password");
}
}
function userValidation (username, password) {
for (let i = 0; i < database.length; i++) {
if (database[i].username === username && database[i].password === password) {
return true;
}
}
return false;
}
function loginButton () {
let loginButton = document.querySelector("#loginButton");
loginButton.addEventListener("click", function() {
let userName = document.querySelector("#user");
let passWord = document.querySelector("#pass");
signIn(userName.value, passWord.value);
});
}
loginButton();
function displayNewsFeed () {
let socialPostsSection = document.querySelector("#socialPosts");
newsFeed.forEach(function (posts) {
let socialPosts = document.createElement("h4");
socialPosts.textContent = posts;
socialPostsSection.appendChild(socialPosts);
});
}
解决方案
这是关于this
上面代码中 addEventListener 块中关键字的上下文。
的值this
将loginButton
在 add 事件侦听器内部引用并且loginButton
没有 signIn 方法,要使您的代码仍然有效,您需要this
通过执行以下操作进行绑定。
loginButton.addEventListener("click", function() {
let userName = document.querySelector("#user");
let passWord = document.querySelector("#pass");
this.signIn(userName.value, passWord.value);
}.bind(this));
现在this
在 addEventListener 块内将引用socialAppFunctions
对象并且它会工作。
推荐阅读
- amazon-web-services - 使用 SSH 访问 AWS EC2 实例
- javascript - 尝试将 HTML 元素作为文本传递给反应组件
- laravel-5 - 邮件队列的 Laravel 5.4 Cron 作业在 AWS EC2 实例上不起作用
- powerbi - 度量内的 Json.document
- android - 在ChildItem Click上隐藏android中嵌套recyclerview的可见性
- azure - 当 AWS 没有时,我的雪花天蓝色似乎正在重新加载文件
- typescript - Angular Firestore 中有 .get() 吗?
- c - 链表 C 中递归追加和新节点创建的一致分段错误
- c++ - 我如何解决使用 MiniGW64 和 MVSC2017 编译的 QMYSQL 驱动程序问题?
- excel - 您可以使用索引/匹配来汇总表中的过滤值吗?