Как можно получить доступ к объекту функции в явном виде? Вот код:
function table(){
this.spoons=10;
}
document.write(typeof(table)+"<br>") // function
table.call(table) //указываю в явном виде, на что будет указывать this в foo
document.write(table.hasOwnProperty("spoons")+"<br>") //true
document.write(table.spoons+"<br>") //обращаемся как к обычному свойству объекта
Я создал переменную spoons, предположительно добавив её в объект, хм НО В КАКОЙ? Ведь typeof(table)===function, ну а бредовая и не рабочая команда typeof(table.call(foo))(с помощью которой я предположил, что смогу докопаться до объекта функции) - бредовая, и не работает!
Получается "объект функции" это как Йети? Все в курсе, но никто не видел?
Или есть всё таки способ отобразить typeof(table)===object?
Просто все,и по всюду говорят, что функции это объекты в js, ну вот и стало интересно! Спасибо!
П.С.: table функция и table объект связанны хоть как-нибудь?
В данном случае произошла путаница из-за непонимания что именно возвращает typeof.
Если обратиться к спецификации, можно заметить, что данный оператор может возвращать строго заданный набор значений.
Конкретно в случае функции используется строка
Object (implements [[Call]]) ----> "function"
То есть если у объекта есть внутреннее поле [[Call]] данный оператор вернет "function". Что не делает этот объект менее объектом, чем любой другой.
Таким образом функция table - вполне себе является объектом.
Следующим доказательством этого может служить то, что при вызове table.call(table), поле spoons добавилось непосредственно в table, как в любой другой объект. При этом все еще осталась возможность вызвать table как функцию.
Или есть всё таки способ отобразить typeof(table)===object?
Такого способа нет, так как нет доступа к внутреннему полю [[Call]].
Действильно, функции в js являются объектами. Чтобы убедиться в этом подручными средствами попробуйте отрыть консоль браузера и добавить определение вашей функции table:
function table(){
this.spoons=10;
}
Если затем ввести window и развернуть глобальный объект, то можно найти свойство table предтавленное следующим образом:
Как видите, это обычный объект со своим прототипом и т.п.
Подробнее советую почитать тут.
Продвижение своими сайтами как стратегия роста и независимости