Показать сообщение отдельно
  #27 (permalink)  
Старый 09.10.2014, 22:45
Интересующийся
Отправить личное сообщение для extrabass4 Посмотреть профиль Найти все сообщения от extrabass4
 
Регистрация: 25.06.2014
Сообщений: 20

Сообщение от 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
Ответить с цитированием