Подтвердить что ты не робот

Каждый объект является функцией, и каждая функция - объект - что правильно?

Я читал эту ссылку JavaScript_syntax

Кажется, что это циклический - каждая функция является объектом, и каждый объект сам по себе является функцией. Какой атомный? Может ли кто-нибудь объяснить лучше?

4b9b3361

Ответ 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!");

Но поскольку строка также является типом данных, ее намного проще инициализировать, просто применяя значение.

Не обязательно ответ на вопрос... просто разъяснение/исправление ответа Аарона Дигуллы.