当前位置 : 主页 > 手机开发 > 其它 >

面向对象的Javascript中的’this’

来源:互联网 收集:自由互联 发布时间:2021-06-19
我认为我目前写的是非常好的 javascript,但我正试图采用更加面向对象的方法.我刚刚开始这样,请原谅我的诺言.我正在将我的一些功能移到对象上并遇到了这个问题.以前,我有一个像这样
我认为我目前写的是非常好的 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);

});

我把这个移到了我的新设置中的一个Object,如下所示:

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’来引用被点击的手风琴内容.我无法使用面向对象的方法访问它.有人可以帮帮我吗?

您可以使用 event.target来引用触发事件的元素,或者使用 event.currentTarget来引用处理程序绑定的元素,这相当于使用它.

toggleAccordion: function(event) {
    // 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(event.currentTarget).siblings().is(":visible")) {
        // slide it down
        jQuery(event.currentTarget).siblings().slideDown();
        // add a class to the title so we can style the active state and change the svg
        jQuery(event.currentTarget).addClass("active");
    }
}

Learn more about event handling with jQuery.

网友评论