How do I create an abstract base class in JavaScript?

后端 未结 17 2140
無奈伤痛
無奈伤痛 2020-12-02 04:06

Is it possible to simulate abstract base class in JavaScript? What is the most elegant way to do it?

Say, I want to do something like: -

var cat = ne         


        
17条回答
  •  旧巷少年郎
    2020-12-02 04:43

    One simple way to create an abstract class is this:

    /**
     @constructor
     @abstract
     */
    var Animal = function() {
        if (this.constructor === Animal) {
          throw new Error("Can't instantiate abstract class!");
        }
        // Animal initialization...
    };
    
    /**
     @abstract
     */
    Animal.prototype.say = function() {
        throw new Error("Abstract method!");
    }
    

    The Animal "class" and the say method are abstract.

    Creating an instance would throw an error:

    new Animal(); // throws
    

    This is how you "inherit" from it:

    var Cat = function() {
        Animal.apply(this, arguments);
        // Cat initialization...
    };
    Cat.prototype = Object.create(Animal.prototype);
    Cat.prototype.constructor = Cat;
    
    Cat.prototype.say = function() {
        console.log('meow');
    }
    

    Dog looks just like it.

    And this is how your scenario plays out:

    var cat = new Cat();
    var dog = new Dog();
    
    cat.say();
    dog.say();
    

    Fiddle here (look at the console output).

提交回复
热议问题