【发布时间】:2026-01-16 14:25:02
【问题描述】:
我认为我目前编写了相当不错的 javascript,但正在尝试转向更面向对象的方法。我只是从这个开始,所以请原谅我的菜鸟。我正在将我的一些功能转移到对象上并遇到了这个问题。以前,我有一个手风琴功能是这样工作的:
jQuery(document).ready(function ($){
var accordionTrigger = $('.accordion-title');
function toggleAccordion() {
// Set a variable for the accordion content
var accordionContent = $('.accordion-container .accordion-content p');
// Slide up any open content
accordionContent.slideUp();
// Remove any active classes
accordionTrigger.removeClass("active");
// If the sibling content is hidden
if(!$(this).siblings().is(":visible")) {
// slide it down
$(this).siblings().slideDown();
// add a class to the title so we can style the active state and change the svg
$(this).addClass("active");
}
}
accordionTrigger.on("click", toggleAccordion);
});
我已将其移至新设置中的对象,如下所示:
Accordion = {
accordionContent: '.accordion-container .accordion-content p',
accordionTrigger: '.accordion-title',
init: function() {
jQuery(this.accordionTrigger).click(this.toggleAccordion.bind(this));
},
toggleAccordion: function() {
// Slide up any open content
jQuery(this.accordionContent).slideUp();
// Remove any active classes
jQuery(this.accordionTrigger).removeClass("active");
// If the sibling content is hidden
if(!jQuery(this.accordionTrigger).siblings().is(":visible")) {
// slide it down
jQuery(this.accordionTrigger).siblings().slideDown();
// add a class to the title so we can style the active state and change the svg
jQuery(this.accordionTrigger).addClass("active");
}
}
}
jQuery(document).ready(function ($){
Accordion.init();
});
我遇到的问题是“this”在面向对象的 Javascript 中的工作方式。在最初的设置中,我可以使用“this”来引用被点击的手风琴内容。我无法使用面向对象的方法访问它。有人可以帮帮我吗?
【问题讨论】:
-
为什么要绑定
this?已经是了。 -
@PHPglue 感谢您的回复。我很抱歉,但我不确定你的意思。我的问题在 if 语句中......在原始函数中,我可以使用“this”来定位被点击的特定手风琴。在对象中,我不能使用该方法。您是否在 init 函数中引用了“绑定”?
标签: javascript jquery oop