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 всегда вызывается в контексте какого-либо объекта