Каждый объект является функцией, и каждая функция - объект - что правильно?
Я читал эту ссылку JavaScript_syntax
Кажется, что это циклический - каждая функция является объектом, и каждый объект сам по себе является функцией. Какой атомный? Может ли кто-нибудь объяснить лучше?
Ответы
Ответ 1
-
Все, что не является примитивным типом (undefined, null, number, string, boolean), является объектом (или экземпляром) в JavaScript. Это означает, что function
наследуется от object
.
-
Объектные экземпляры могут содержать больше экземпляров, которые могут быть функциями. Это то, что мы называем "методом" (поскольку у него есть автоматическая переменная this
).
-
Поскольку вы не можете "вызывать" каждый экземпляр объекта, не каждый объект является функцией.
Ответ 2
Каждая функция является объектом. Объекты могут содержать функции (методы), но объект не нужен для функции.
Ответ 3
Я думаю, что эту концепцию часто неправильно понимают.
Утилита для визуализации отношения типов JS http://jstype.herokuapp.com/#/home
Типы данных Javascript
- Примитивные типы - числа, строки, логические значения, null и undefined.
- Все непримитивные типы объект:
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.
Ответ 4
Также Function
всегда является свойством object
.
Это означает, что все функции в JavaScript всегда привязаны к объекту. Если вы не укажете объект для привязки функции к ней, связанной с объектом окна (также называемым глобальными функциями)
.. Фредрик
Ответ 5
Лучше сказать, что в JavaScript все можно рассматривать как объект, включающий примитивные типы, а также типы функций; что делает интерпретатор JavaScript, так это то, что он автоматически продвигает ваши примитивы и функции к их типам обертки объектов при взаимодействии с ними.
Существует также объект Function, несколько эквивалентных Wrappers для других примитивов в JavaScript, что означает, что вы даже можете вызвать методы для экземпляров функций, например:
myFunction(someArg).call(this)
При этом не каждый объект на самом деле является функцией.
Ответ 6
Как говорили другие, функции - это объекты, которые могут передаваться по ссылке, как и другие объекты js. Не все объекты являются функциями, только те, которые объявлены как таковые.
Вы часто увидите методы, объявленные так:
var myFunc = function(foo, bar) {
...
};
Это должно укрепить тот факт, что mthod является функциональным объектом и как таковой является свойством объекта, где он определен, так же, как любая другая переменная, которую вы можете определить с помощью var
.
Это основа самой важной функции в javascript, закрытии.
Ответ 7
Каждая функция - это объект.
Я не эксперт по javascript, но я не вижу, как каждый объект является функцией. (Я вижу, как каждый объект может быть функцией, но другой)
Ответ 8
Цитата из Работа с объектами - Документы 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 (каламбур, ориентированный на объектно-ориентированный стиль программирования).
Ответ 9
Только для ответа Аарона Дигуллы.
В javascript не каждый объект является функцией. Но Object, Array, String и многие другие встроенные объекты - это функции, которые используются с новым оператором для создания объекта. Я думаю, что это то, что путают большинство людей.
Ответ 10
javascript - все хэш-таблица. Райан Дал сказал об этом в одном из своих разговоров. вот что такое json; определение хэш-таблицы. поэтому у вас можно получить доступ к объекту с использованием нотации или нотации объектов. значение хэш-таблицы также может быть функцией, которая является хэш-таблицей. или, скорее, ассоциативный массив
type Object в консоли u get {[native code]}, который является хэш-таблицей
Ответ 11
Объект - это абстрактные данные, присваиваемые классу, и этот класс присваивается объекту. Объект может иметь свойства и свойства, которые могут содержать значения и функции.
Или просто для упрощения понимания вы можете сказать, что все, что не является примитивным типом данных (number, string, boolean, unll и undefined), можно классифицировать как объект.
Ответ 12
Выбранный ответ неверен. В JavaScript все является функцией, кроме примитивных типов. Сам объект - это функция, которая называется функцией Object(). Используйте, например, следующий код:
<script>
alert(Object);
</script>
Ответ 13
выбранный ответ Аарона Дигуллы не на 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!");
Но поскольку строка также является типом данных, ее намного проще инициализировать, просто применяя значение.
Не обязательно ответ на вопрос... просто разъяснение/исправление ответа Аарона Дигуллы.