不能直接调用基础对象的方法

时间:2014-03-08 21:21:20

标签: javascript

我有这个基类:

    function Transition(slide, settings){
        this.slide = slide;
        this.settings = settings;
        this.duration = (this.settings['transitionSpeed'] / 1000) + 's'
    }

    Transition.prototype.removeOrderClasses = function(){
        DomUtil.removeClass(this.slide, 'nd-slide-current');
        DomUtil.removeClass(this.slide, 'nd-slide-next');
        DomUtil.removeClass(this.slide, 'nd-slide-previous');
    }

我从FadeTransition中得到它:

    function FadeTransition(slide, settings){
        Transition.call(this, slide, settings);
    }
    FadeTransition.prototype = Object.create(Transition);
    FadeTransition.prototype.constructor = FadeTransition;

    FadeTransition.prototype.in = function(){
        this.removeOrderClasses(); //KABOOM
    }

this.removeOrderClasses会抛出错误,因为无法找到该方法。但是,找到this.prototype.removeOrderClasses

我应该如何引用这些功能?如果我有多个级别的继承,我不需要编写这些繁琐的语句:this.prototype.prototype.someMethod()

1 个答案:

答案 0 :(得分:1)

您将错误的对象传递给Object.create。它应该是:

FadeTransition.prototype = Object.create(Transition.prototype);

否则,您正在创建一个继承自Transition函数的新对象,而不是Transition.prototype,其中定义了所有原型方法。


这也是this.prototype.removeOrderClasses“工作”的原因。普通对象没有原型属性(试一试:console.log(({}).prototype)),但this.prototype引用Transition.prototype