我正在用新的ES6代码编写一个简单的js标签,但是在变量范围和导出类方面有点麻烦。
这是我的代码
import $ from 'jquery';
import '../css/_style.scss';
import './mediaupload.js';
//
let i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
tablinks = document.getElementsByClassName("tablinks");
class SMDVadmin{
openTab(evt, tabname){
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(tabname).style.display = "block";
evt.currentTarget.className += " active";
}
}
export default SMDVadmin;
我正在将函数openTab
用作
<ul>
<li><a href="#" onClick="openTab(e, tab1)" id="th1">HOme</a></li>
<li><a href="#" onClick="openTab(e, tab2)" id="th2">Address</a></li>
</ul>
但是单击时会出现错误Uncaught ReferenceError: openTab is not defined
但是,如果我这样编码,它就可以工作了:):
let i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
tablinks = document.getElementsByClassName("tablinks");
const openTab = (evt, tabname) => {
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(tabname).style.display = "block";
evt.currentTarget.className += " active";
}
window.openTab = openTab;
但是我还有更多其他功能,我希望它们保留在一个类中以保持完整性
答案 0 :(得分:-1)
通过将openTab
方法放在类中,可以有效地对其进行“命名”。您必须创建该类的实例,然后在该实例上调用该方法。
var smdvAdmin = new SMDVadmin()
smdvAdmin.openTab()
或者,您可以将方法设为静态,因此不需要新的实例:
class SMDVadmin{
static openTab(evt, tabname){}
}
SMDVadmin.openTab()
如果要从文件导入单个方法,则可能根本不需要该类。
您可以改为导出方法
const openTab = (evt, tabname) => {}
export default openTab;