Javascript Can';无法理解上下文:未定义,但它应该';不可能
我需要通过单击按钮从页面中删除一些弹出元素,但是上下文或对象的属性发生了一些事情,我完全不知道发生了什么Javascript Can';无法理解上下文:未定义,但它应该';不可能,javascript,this,Javascript,This,我需要通过单击按钮从页面中删除一些弹出元素,但是上下文或对象的属性发生了一些事情,我完全不知道发生了什么 constructor(container) { this._container = container; this._card = null; this._popup = null; } render(card) { this._card = new Card(card); renderComponent(this._contain
constructor(container) {
this._container = container;
this._card = null;
this._popup = null;
}
render(card) {
this._card = new Card(card);
renderComponent(this._container, this._card);
this._card.clickCardListener(".film-card__title", "click", function () {
this._popup = new Popup(card);
console.log(this._popup);
**//log: Popup {_element: null, _card {...}**
renderComponent(mainElement, this._popup);
console.log(this._popup);
**//log: Popup {_element: section.film-details, _card {...}**
this._popup
.getElement()
.querySelector(".film-details__close-btn")
.addEventListener("click", function () {
console.log(this._popup);
**//log: undefined**
});
});
}
在我尝试使用控制器之前,所有这些都起到了作用(我正在学习OOP,所以它是…),请帮忙。我已经花了大约5个小时在这行代码上,我不知道我在做什么
this._popup
.getElement()
.querySelector(".film-details__close-btn")
.addEventListener("click", () => {
console.log(this._popup);
});
或
试试这个
this._popup
.getElement()
.querySelector(".film-details__close-btn")
.addEventListener("click", () => {
console.log(this._popup);
});
或
您必须将arrow函数作为
.addEventListener
方法的第二个参数传递,因为它没有自己的上下文,并且接受父上下文
this._popup
.getElement()
.querySelector(".film-details__close-btn")
.addEventListener("click", () => {
console.log(this._popup);
});
您可以阅读有关函数的this关键字的更多信息。您必须将arrow函数作为
.addEventListener
方法的第二个参数传递,因为它没有自己的上下文,并且接受父上下文
this._popup
.getElement()
.querySelector(".film-details__close-btn")
.addEventListener("click", () => {
console.log(this._popup);
});
您可以阅读有关函数的this关键字的更多信息。它成功了,非常感谢。到底是怎么回事?我们“存储”了这个更高的范围?@Stan_Effy否,箭头函数从封闭范围中拾取了
这个上下文,但是函数定义了它们自己的这个。感谢解释请看:它起作用了,非常感谢。到底是怎么回事?我们“存储”了这个更高的作用域?@Stan_Effy否,箭头函数从封闭的作用域中拾取this
上下文,但是function
函数定义了它们自己的this
。感谢您的解释请参见:this
在用function(){…}定义的回调中
与外部的不同。“我已经在这行代码上花了大约5个小时,我不知道我在做什么”好的,所以这里有一个开始:如果不运行并希望它能工作,就永远不要写出一个完整的尝试解决方案(这里有~50个LoC!)。把一个任务分解成子任务,用最简单的方法完成第一个任务。我可以在屏幕上显示一些东西吗?伟大的我能做按钮吗?伟大的我是否可以在单击按钮时使第一件事情(例如消失并重新出现)消失?伟大的我能让第一件东西看起来像窗户吗?现在你基本上有了一个模式弹出窗口。@JaredSmith这是我在互联网上第一个被问到的问题,我对上下文几乎一无所知,这就是为什么我决定从亚当和夏娃开始。问题是,在我使用控制器执行此任务之前,main.js工作得非常好(并且obv.的组织方式有所不同),以使main.js中的代码不那么多。感谢您的建议和解释,很高兴这里有这样的人this
在用function(){…}
定义的回调中this
与外部的this
不同。“我在这行代码上已经花了大约5个小时,我不知道我在做什么”ok,所以这里有一个开始:在没有运行它并希望它工作的情况下,永远不要完整地写出一个尝试过的解决方案(这里有~50个LoC!)。把一个任务分解成子任务,用最简单的方法完成第一个任务。我可以在屏幕上显示一些东西吗?伟大的我能做按钮吗?伟大的我是否可以在单击按钮时使第一件事情(例如消失并重新出现)消失?伟大的我能让第一件东西看起来像窗户吗?现在你基本上有了一个模式弹出窗口。@JaredSmith这是我在互联网上第一个被问到的问题,我对上下文几乎一无所知,这就是为什么我决定从亚当和夏娃开始。问题是,在我使用控制器执行此任务之前,main.js工作得非常好(并且obv.的组织方式有所不同),以使main.js中的代码不那么多。谢谢你的建议和解释,有这样的人在这里真好啊,当然!我是个白痴,谢谢你啊,当然!我是个白痴,谢谢你