instance - ES6:如何从静态方法访问实例类?
问题描述
从 DOM 按钮访问类的实例及其方法的推荐方法是什么?考虑这个例子:现在我正在调用 ES6 类的静态方法,因为我不知道如何调用实例方法:
<script src="MyClass.js">
<button onClick="MyClass.buttonClicked()">
班级看起来像
class MyClass() {
static instance;
constructor() {
instance = this;
//important initialization of some vars
}
static buttonClicked() {
MyClass.instance.nonStaticButtonClicked();
}
nonStaticButtonClicked() {
console.log("button clicked!");
//use the vars which have been initialized in constructor()
}
}
这在 Chrome 中完美无缺,而在 Safari 中则完全不适用,因为显然 Safari 不喜欢静态变量声明,并在参数声明后给出错误“意外的令牌 '='。预期为 ')' 或 ','。 ,另请参阅 Marthinus Engelbrecht 的评论: SyntaxError: Unexpected token '='. Expected a ')' or a ',' after a parameter declaration.' 在野生动物园
我的问题是,如果我做错了,我应该怎么做?特别是,从按钮访问实例方法的最佳方法是什么?
编辑:我只是把事情复杂化了:
window.addEventListener("load", function() {
window.myClass = new MyClass();
});
和按钮:
<button onClick="window.myClass.nonStaticButtonClicked()">
不需要静态调用和实例/单例。感谢大家。
解决方案
推荐阅读
- macos - SM-* 命令在使用命令“emacs -nw”在 iterm2 中运行时无法被 Emacs 识别
- matlab - 有没有一种有效的方法来测量从单个点到大量点阵列中每个点的距离?
- c# - 表单提交 - 为每个字段添加额外的参数并在服务器上读取它们
- python-3.x - 如何从已经使用networkx创建的多个节点添加多个边?
- python - Airflow 1.10.2 未将日志写入 S3
- amazon-web-services - 如何在 Redshift(亚马逊)中更新 UDF?
- heroku - 无法在“main”中找到应用程序对象“app”-Heroku CLI
- r - 检查数据框中的特定行组中是否存在值
- r - 缓存矩阵的逆
- ios - 如何将从 ftp URL 检索到的数据转换为 Swift 中的可用对象