【问题标题】:OO Javascript, calling prototype function from constructors addEventListenerOO Javascript,从构造函数 addEventListener 调用原型函数
【发布时间】:2014-03-18 22:11:25
【问题描述】:

我正在尝试设置一个对象,当我创建该对象的实例时,我希望将 EventListener 添加到特定对象。但它给我抛出了一个异常声明

Uncaught TypeError: Object #<HTMLDivElement> has no method 'nextSlide'

我有以下代码

//Constructor function
function CinnamonSlider (sliderID) {
// Settings - must be set. 
    this.sliderID = sliderID;   

    var nextController = document.querySelector('.'+this.sliderID+'-next');

    nextController.addEventListener("click", function(e) {
        this.nextSlide();
        e.preventDefault();
    });

}

CinnamonSlider.prototype.nextSlide = function() {
    console.log('next');
};

var mySlider = new CinnamonSlider('my-slider');

我在这里做错了什么?

谢谢!

【问题讨论】:

    标签: javascript oop prototype


    【解决方案1】:

    this 在事件处理程序中是元素,而不是类。将this 的值存储在一个变量中

    function CinnamonSlider (sliderID) {
    
        this.sliderID = sliderID;   
    
        var nextController = document.querySelector('.'+this.sliderID+'-next');
    
        var self = this;
    
        nextController.addEventListener("click", function(e) {
            self.nextSlide();
            e.preventDefault();
        });
    
    }
    
    CinnamonSlider.prototype.nextSlide = function() {
        console.log('next');
    };
    
    var mySlider = new CinnamonSlider('my-slider');
    

    【讨论】:

    • 谢谢你!对它进行了排序。我喜欢 Stack Overflow。
    猜你喜欢
    • 2015-04-06
    • 2015-10-10
    • 2010-12-21
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多