# Class: baseclass

## LuCI. baseclass

`LuCI.baseclass` is the abstract base class all LuCI classes inherit from.

It provides a simple means to create subclasses of given classes and implements prototypal inheritance.

#### new LuCI.baseclass()

luci.js, line 23

### Methods

#### staticLuCI.baseclass.extend(properties){LuCI.baseclass}

luci.js, line 55

  Extends this base class with the properties described in `properties` and returns a new subclassed Class instance

  Name | Type | Description
  --- | --- | ---
  `properties` | Object.<string, *> | An object describing the properties to add to the new subclass.

  ##### Returns:

  Type | Description
  --- | ---
  LuCI.baseclass | Returns a new LuCI.baseclass subclassed from this class, extended by the given properties and with its prototype set to this base class to enable inheritance. The resulting value represents a class constructor and can be instantiated with `new`.

#### staticLuCI.baseclass.instantiate(params){LuCI.baseclass}

luci.js, line 133

  Calls the class constructor using `new` with the given argument array being passed as variadic parameters to the constructor.

  Name | Type | Description
  --- | --- | ---
  `params` | Array.<*> | An array of arbitrary values which will be passed as arguments to the constructor function.

  ##### Returns:

  Type | Description
  --- | ---
  LuCI.baseclass | Returns a new LuCI.baseclass instance extended by the given properties with its prototype set to this base class to enable inheritance.

#### staticLuCI.baseclass.isSubclass(classValue){boolean}

luci.js, line 158

  Checks whether the given class value is a subclass of this class.

  Name | Type | Description
  --- | --- | ---
  `classValue` | LuCI.baseclass | The class object to test.

  ##### Returns:

  Type | Description
  --- | ---
  boolean | Returns `true` when the given `classValue` is a subclass of this class or `false` if the given value is not a valid class or not a subclass of this class'.

#### staticLuCI.baseclass.singleton(properties, new_args){LuCI.baseclass}

luci.js, line 114

  Extends this base class with the properties described in `properties`, instantiates the resulting subclass using the additional optional arguments passed to this function and returns the resulting subclassed Class instance.

  This function serves as a convenience shortcut for `Class.extend()` and subsequent `new`.

  Name | Type | Description
  --- | --- | ---
  `properties` | Object.<string, *> | An object describing the properties to add to the new subclass.
  `new_args` | * | optional repeatable Specifies arguments to be passed to the subclass constructor as-is in order to instantiate the new subclass.

  ##### Returns:

  Type | Description
  --- | ---
  LuCI.baseclass | Returns a new LuCI.baseclass instance extended by the given properties with its prototype set to this base class to enable inheritance.

#### super(key, callArgs){*|null}

luci.js, line 227

  Walks up the parent class chain and looks for a class member called `key` in any of the parent classes this class inherits from. Returns the member value of the superclass or calls the member as a function and returns its return value when the optional `callArgs` array is given.

  This function has two signatures and is sensitive to the amount of arguments passed to it:

  - `super('key')` - Returns the value of `key` when found within one of the parent classes.
  - `super('key', ['arg1', 'arg2'])` - Calls the `key()` method with parameters `arg1` and `arg2` when found within one of the parent classes.

  Name | Type | Description
  --- | --- | ---
  `key` | string | The name of the superclass member to retrieve.
  `callArgs` | Array.<*> | optional An optional array of function call parameters to use. When this parameter is specified, the found member value is called as a function using the values of this array as arguments.

  ##### Throws:

  Throws a `ReferenceError` when `callArgs` are specified and the found member named by `key` is not a function value.

  Type
    ReferenceError

  ##### Returns:

  Type | Description
  --- | ---
  * | null | Returns the value of the found member or the return value of the call to the found method. Returns `null` when no member was found in the parent class chain or when the call to the superclass method returned `null`.

#### varargs(args, offset, extra_args){Array.<*>}

luci.js, line 186

  Extract all values from the given argument array beginning from `offset` and prepend any further given optional parameters to the beginning of the resulting array copy.

  Name | Type | Description
  --- | --- | ---
  `args` | Array.<*> | The array to extract the values from.
  `offset` | number | The offset from which to extract the values. An offset of `0` would copy all values till the end.
  `extra_args` | * | optional repeatable Extra arguments to add to prepend to the resulting array.

  ##### Returns:

  Type | Description
  --- | ---
  Array.<*> | Returns a new array consisting of the optional extra arguments and the values extracted from the `args` array beginning with `offset`.