Function inheritance - garevna/js-course GitHub Wiki

:mortar_board: Биндинг и каррирование


:mortar_board: Наследование

Итак, любая функция в JS является экземпляром класса Function

Отсюда следует:

  • любая функция является объектом
  • все функции наследуют свойства и методы объекта prototype конструктора Function
console.dir ( Function )
Результат в консоли:
▼ ƒ Function()
    arguments: (...)
    caller: (...)
    length: 1
    name: "Function"
  ▼ prototype: ƒ ()
      ► apply: ƒ apply()
        arguments: (...)
      ► bind: ƒ bind()
      ► call: ƒ call()
        caller: (...)
      ► constructor: ƒ Function()
        length: 0
        name: ""
      ► toString: ƒ toString()
      ► Symbol(Symbol.hasInstance): ƒ [Symbol.hasInstance]()
      ► get arguments: ƒ211жю.. ()
      ► set arguments: ƒ ()
      ► get caller: ƒ ()
      ► set caller: ƒ ()
      ► __proto__: Object
  ► __proto__: ƒ ()

:warning: Свойство __proto__ любой функции является ссылкой на свойство prototype конструктора Function

function func () {
    console.dir ( this )
}

console.dir ( func )
Результат в консоли:
▼ ƒ func()
    arguments: null
    caller: null
    length: 0
    name: "func"
  ► prototype: {constructor: ƒ}
  ▼ __proto__: ƒ ()
      ► apply: ƒ apply()
        arguments: (...)
      ► bind: ƒ bind()
      ► call: ƒ call()
        caller: (...)
      ► constructor: ƒ Function()
        length: 0
        name: ""
      ► toString: ƒ toString()
      ► Symbol(Symbol.hasInstance): ƒ [Symbol.hasInstance]()
      ► get arguments: ƒ ()
      ► set arguments: ƒ ()
      ► get caller: ƒ ()
      ► set caller: ƒ ()
      ► __proto__: Object

:paperclip: Поскольку конструктор Function также является функцией, его свойство __proto__ тоже является ссылкой на собственное свойство prototype


Функция в JS всегда является методом ( т.е. свойством какого-либо объекта )


:coffee: :one:

Покажем, что функции, объявленные в глобальной области видимости, по умолчанию являются свойствами глобального объекта window

function sample () {
    console.info ( "I'm sample" )
}

function figure () {
    console.info ( "I'm figure" )
}

var funcs = [ "sample", "figure" ]

for ( var func of funcs ) {
    window [ func ]()
}

Все функции, имена которых перечислены в массиве funcs, будут вызваны и в консоль будет выведено

I'm sample
I'm figure

:paperclip: Функция в JS всегда вызывается в контексте какого-либо объекта