Skip to main content

@augments

Synonyms

@extends

Syntax

@augments <namepath>

Overview

The @augments or@extends tag indicates that a symbol inherits from, and potentially adds to, a parent symbol. You can use this tag to document both class-based and prototype-based inheritance.

In JSDoc 3.3.0 and later, if a symbol inherits from multiple parents, and both parents have identically named members, JSDoc uses the documentation from the last parent that is listed in the JSDoc comment.

Examples

In the following example, the Duck class is defined as a subclass of Animal. Duck instances have the same properties as Animal instances, as well as a speak method that is unique to Duck instances.

Documenting a class/subclass relationship

/**
* @constructor
*/
function Animal() {
/** Is this animal alive? */
this.alive = true
}

/**
* @constructor
* @augments Animal
*/
function Duck() {}
Duck.prototype = new Animal()

/** What do ducks say? */
Duck.prototype.speak = function () {
if (this.alive) {
alert('Quack!')
}
}

var d = new Duck()
d.speak() // Quack!
d.alive = false
d.speak() // (nothing)

In the following example, the Duck class inherits from both the Flyable and Bird classes, both of which define a takeOff method. Because the documentation for Duck lists @augments Bird last, JSDoc automatically documents Duck#takeOff using the comment from Bird#takeOff.

Multiple inheritance with duplicated method names

/**
* Abstract class for things that can fly.
* @class
*/
function Flyable() {
this.canFly = true
}

/** Take off. */
Flyable.prototype.takeOff = function () {
// ...
}

/**
* Abstract class representing a bird.
* @class
*/
function Bird(canFly) {
this.canFly = canFly
}

/** Spread your wings and fly, if possible. */
Bird.prototype.takeOff = function () {
if (this.canFly) {
this._spreadWings()._run()._flapWings()
}
}

/**
* Class representing a duck.
* @class
* @augments Flyable
* @augments Bird
*/
function Duck() {}

// Described in the docs as "Spread your wings and fly, if possible."
Duck.prototype.takeOff = function () {
// ...
}