提问人:Uchenna Ajah 提问时间:3/19/2023 最后编辑:Uchenna Ajah 更新时间:3/19/2023 访问量:477
无法从其类未声明的对象中读取私有成员 #form [duplicate]
Cannot read private member #form from an object whose class did not declare it [duplicate]
问:
我无法访问用作已提交事件参数的私有方法。现在的使用指向形式,而不是类本身。在 JavaScript 中引用类的最简单方法是什么,而不考虑对象深度或闭包?this
class payment {
#form;
constructor() {
this.#form = $('#code-form').get(0);
this.#form.addEventListener('submit', this.#submitForm);
}
#submitForm(e) {
e.preventDefault();
console.log( this.#form ); // Cannot read private member #form from an object whose class did not declare it
}
}
(new payment());
答:
1赞
Vanortton
3/19/2023
#1
您可以在构造函数中使用,也可以在添加事件侦听器 1 时使用。bind
下面是使用 bind 的示例:
class payment {
#form;
constructor() {
this.#form = $('#code-form').get(0);
this.submitForm = this.submitForm.bind(this);
this.#form.addEventListener('submit', this.submitForm);
}
submitForm(e) {
e.preventDefault();
console.log(this.#form);
}
}
(new payment());
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Example</title>
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<form id="code-form">
<button type="submit"></button>
</form>
</body>
</html>
评论
0赞
Uchenna Ajah
3/19/2023
我刚刚尝试了上面的代码并收到以下错误 - 私人方法“#submitForm”在新付款时不可写。
1赞
Uchenna Ajah
3/19/2023
但是,我尝试通过删除该方法,如果该方法公开,它可以正常工作。#
submitForm
0赞
Vanortton
3/19/2023
我做了一个编辑,现在再试一次。
0赞
Uchenna Ajah
3/19/2023
现在,当该方法公开时,它就可以工作了。谢谢submitForm
评论
addEventListener('submit', x)
$('#code-form')
<form>
<form>
this
payment
'submit', this.#submitForm
'submit', (e) => this.#submitForm(e)
this