【发布时间】:2018-12-18 14:36:05
【问题描述】:
所以我试图在一个类中构建我的代码,以便它可以更有条理,但我正在苦苦挣扎。我有代码:
class App {
constructor() {
// Get elements from DOM
const titleBox = document.getElementById('titleBox');
const navBox = document.getElementById('navBox');
const navLinks = document.querySelectorAll('.header__listLink');
const headerTitle = document.getElementById('headerTitle');
const headerSubtitle = document.getElementById('headerSubtitle');
const ulNav = document.getElementById('ulNav');
const ulNavLinks = document.querySelectorAll('.ulNavLink');
// for each nav link, add an event listener, expanding content area
navLinks.forEach((link) => {
link.addEventListener('click', this.clickedLinkState);
});
}
clickedLinkState(e) {
e.preventDefault();
titleBox.classList.remove("header__title-box");
titleBox.classList.add("header__title-box--linkClicked");
headerTitle.classList.remove("header__title");
headerTitle.classList.add("header__title--linkClicked");
headerSubtitle.classList.remove("header__subtitle");
headerSubtitle.classList.add("header__subtitle--linkClicked");
ulNav.classList.remove("header__listInline");
ulNav.classList.add("header__listInline--linkClicked");
navBox.classList.remove("header__nav-box");
navBox.classList.add("header__nav-box--linkClicked");
ulNavLinks.forEach((navLink) => {
navLink.classList.remove("header__listLink");
navLink.classList.add("header__listLink--linkClicked");
});
}
}
const app = new App();
我得到了错误:“main.js:40 Uncaught ReferenceError: ulNavLinks is not defined 在 HTMLLIElement.clickedLinkState (main.js:40)"。'ulNavLinks' 是一个 nodeList。
例如,我试图使用“this.titleBox = ...”来定义元素,但情况变得更糟,我无法通过 clickedLinkState 方法访问它。在课外它正在工作。
为什么我无法访问我的方法中的“ulNavLinks”?如果我将它们声明为“this.titleBox”、“this.navBox”,为什么我无法在方法中访问我的属性?
【问题讨论】:
-
构造函数中声明的变量只是该函数的简单局部变量。它们不会隐含地成为对象属性;你必须通过在
this上创建属性来明确地做出这些。 -
问题在于状态。试试 'link.addEventListener('click', this.clickedLinkState.bind(this))'
标签: javascript class ecmascript-6