Сообщение от petya
|
Метод -- это свойство со ссылкой на функцию, можно так сказать. Функция в js - это первоклассный объект. На этот объект может быть много ссылок.
f=function waw(){}//f является ссылкой на (скомпилированный) объект function waw(){}
o={}
o.f=f//o.f является ссылкой на (скомпилированный) объект function waw(){}, т.e. тот же самый объект.
Методом обычно называют ссылку типа o.f, хотя это условность, f является global.f (в браузере global -- window)
Да, в js все есть объект, семантически, по факту, примитивные типы не являются объектами, но и с ними можно обращатся как с объектами, они преобразуются в объекты, при необходимости. Функция -- это 100% объект.
Твое непонимание идет от того, что ты не можешь отличить функцию от вызова функции. допустим есть функция. Представь себе, что return - это не синтаксическая конструкция, а функция, которая получает 1 аргумент.
foo=function(){return(yoba)}
return (foo) // return получает в качестве аргумента function(){return(yoba)}
return (foo()) // return получает в качестве аргумента yoba
Прочувствуй эту разницу
|
Спасибо большое за ответы , но не много не ясно касательно этого
"Методом обычно называют ссылку типа o.f, хотя это условность, f является global.f (в браузере global -- window)
"
ведь f это свойство, а
о может быть не global, а находиться в функции, то есть LExicalEnviroment
function makeCounter() {
var currentCount = 0;
// возвращаемся к функции
function counter() {
return ++currentCount;
}
// ...и добавляем ей методы!
counter.set = function(value) {
currentCount = value;
};
counter.reset = function() {
currentCount = 0;
};
return counter;
}
var counter = makeCounter();
alert( counter() ); // 1
alert( counter() ); // 2
counter.reset();
alert( counter() ); // 1
Ведь здесь counter.set, counter.reset , не window.set и window.reset