Я читал эту ссылку JavaScript_syntax
Кажется, что это циклический - каждая функция является объектом, и каждый объект сам по себе является функцией. Какой атомный? Может ли кто-нибудь объяснить лучше?
Я читал эту ссылку JavaScript_syntax
Кажется, что это циклический - каждая функция является объектом, и каждый объект сам по себе является функцией. Какой атомный? Может ли кто-нибудь объяснить лучше?
Все, что не является примитивным типом (undefined, null, number, string, boolean), является объектом (или экземпляром) в JavaScript. Это означает, что function
наследуется от object
.
Объектные экземпляры могут содержать больше экземпляров, которые могут быть функциями. Это то, что мы называем "методом" (поскольку у него есть автоматическая переменная this
).
Поскольку вы не можете "вызывать" каждый экземпляр объекта, не каждый объект является функцией.
Каждая функция является объектом. Объекты могут содержать функции (методы), но объект не нужен для функции.
Я думаю, что эту концепцию часто неправильно понимают.
Утилита для визуализации отношения типов JS http://jstype.herokuapp.com/#/home
var foo = { };
var foo = [1, 2, 3];
var foo = function abc() { return "hello world"; };
var foo = new Number(30);
var foo = new String("Hello World");
var foo = new Boolean(true);
var foo = new RegExp(/[foo]+/);
// All 'foo` are object.
Также Function
всегда является свойством object
.
Это означает, что все функции в JavaScript всегда привязаны к объекту. Если вы не укажете объект для привязки функции к ней, связанной с объектом окна (также называемым глобальными функциями)
.. Фредрик
Лучше сказать, что в JavaScript все можно рассматривать как объект, включающий примитивные типы, а также типы функций; что делает интерпретатор JavaScript, так это то, что он автоматически продвигает ваши примитивы и функции к их типам обертки объектов при взаимодействии с ними.
Существует также объект Function, несколько эквивалентных Wrappers для других примитивов в JavaScript, что означает, что вы даже можете вызвать методы для экземпляров функций, например:
myFunction(someArg).call(this)
При этом не каждый объект на самом деле является функцией.
Как говорили другие, функции - это объекты, которые могут передаваться по ссылке, как и другие объекты js. Не все объекты являются функциями, только те, которые объявлены как таковые.
Вы часто увидите методы, объявленные так:
var myFunc = function(foo, bar) {
...
};
Это должно укрепить тот факт, что mthod является функциональным объектом и как таковой является свойством объекта, где он определен, так же, как любая другая переменная, которую вы можете определить с помощью var
.
Это основа самой важной функции в javascript, закрытии.
Каждая функция - это объект.
Я не эксперт по javascript, но я не вижу, как каждый объект является функцией. (Я вижу, как каждый объект может быть функцией, но другой)
Цитата из Работа с объектами - Документы MDN
раздел Использование инициализаторов объектов в последнем абзаце:
"В JavaScript 1.1 и более ранних версиях вы не можете использовать инициализаторы объектов. Вы можете создавать объекты только с помощью своих функций-конструкторов или с помощью функции, предоставленной каким-то другим объектом для этой цели. См. Использование функции конструктора.
означало, что все объекты WERE функционируют! В частности, при оценке, экземплярах или экземплярах функций.
Буквально ВСЕ объекты этого урожая были созданы синтаксически с конструкциями типа:
"newobj = new constructFunctor(arg1,arg2){this.prop1=arg1 /* etc */}(val1,val2)"
И в строке, которая делает объект "newobj
", есть слово "constructFunctor
", имя функции. Заявление намеренно цитируется, чтобы произвести впечатление на то, что он должен быть выполнен eval()
'd. До исполнения "newobj
" "приравнивается" к функции, потому что оператор должен иметь один и "есть" один в силу существования "constructFunctor
" буквального существования, чтобы определить значение newobj
при выполнении. Цитата, а не, очень интенциональна, чтобы разъяснить эту абстракцию. Однако, поскольку JavaScript имеет функцию eval
, эта абстракция на самом деле намеренно включена в язык JavaScript.
Наследие этого по-прежнему имеет основополагающее значение для JavaScript, хотя некоторые синтаксические короткие сокращения были добавлены как "инициализаторы объектов", используя сокращенное обозначение типа "no={}
". То, что приведенный выше пункт по-прежнему остается в текущей документации, имеет существенное значение по указанным причинам.
Кроме того, JavaScript также иллюстрирует фундаментальные парадигмы функционального программирования. Это определяет все как функцию, используя абстракции рекурсивной теории функций и исчисления лямбда! Например, 0(), 1(), 2(),... - постоянные нонарные функции, более известные как 0,1,2,3,...
JavaScript полностью совместим с подходом типа функционального программирования, а не с обычным OOPS (каламбур, ориентированный на объектно-ориентированный стиль программирования).
Только для ответа Аарона Дигуллы. В javascript не каждый объект является функцией. Но Object, Array, String и многие другие встроенные объекты - это функции, которые используются с новым оператором для создания объекта. Я думаю, что это то, что путают большинство людей.
javascript - все хэш-таблица. Райан Дал сказал об этом в одном из своих разговоров. вот что такое json; определение хэш-таблицы. поэтому у вас можно получить доступ к объекту с использованием нотации или нотации объектов. значение хэш-таблицы также может быть функцией, которая является хэш-таблицей. или, скорее, ассоциативный массив type Object в консоли u get {[native code]}, который является хэш-таблицей
Объект - это абстрактные данные, присваиваемые классу, и этот класс присваивается объекту. Объект может иметь свойства и свойства, которые могут содержать значения и функции. Или просто для упрощения понимания вы можете сказать, что все, что не является примитивным типом данных (number, string, boolean, unll и undefined), можно классифицировать как объект.
Выбранный ответ неверен. В JavaScript все является функцией, кроме примитивных типов. Сам объект - это функция, которая называется функцией Object(). Используйте, например, следующий код:
<script>
alert(Object);
</script>
выбранный ответ Аарона Дигуллы не на 100% правильный, потому что он говорит,
Все, что не является примитивным типом (undefined, null, number, строка, boolean) - это объект.
но строка - это объект. Вот почему вы можете делать такие вещи, как:
myString="Hello World";
x = myString.length;
newString = myString.toUpperCase();
link = myString.link("http://www.hello-world.com/");
И многие другие методы могут применяться к строковому объекту.
Вы также можете инициализировать строку следующим образом:
myString = new String("Hello, World!");
Но поскольку строка также является типом данных, ее намного проще инициализировать, просто применяя значение.
Не обязательно ответ на вопрос... просто разъяснение/исправление ответа Аарона Дигуллы.