Терминология для различных типов функций

По-видимому, существует несколько разных "групп" функций -, подобных вещам в JavaScript. Вот мои придуманные -имена для них:

  • "Обычные функции" :Их можно вызывать со скобками и с new. Большинство функций относятся к этой категории.

  • "Конструктор -работает только" :Их можно вызывать только с помощью new. Например, Image, DOMParserи т. д.

  • "Функции, не являющиеся конструкторами -" :Их можно вызывать со скобками, но нельзя с new. Например, Math.round, Function.prototype.

  • «Не -вызываемые функции» :Эти функции вообще нельзя вызывать. Например, window.constructor, Document, NodeListи т. д.

Каковы собственные имена этих различных групп функций?


Я также пытаюсь выяснить, можно ли определить, в какой «группе» находится функция, основываясь на том, установлено ли для ее свойства[[Prototype]](__proto__)значение Function.prototype.

  • Большинство «обычных функций» будут иметь Function.prototype, но их можно удалить с помощью нестандартного -__proto__.

  • Большинство "конструкторов -только функции" имеют Object.prototype. Я не могу найти ни одного случая, когда у них есть Function.prototype(, поэтому нет callилиapply). Всегда ли это так / заданное поведение?

  • «Не -функции-конструкторы», по-видимому, в основном имеют Function.prototype, за исключением самого Function.prototype. Есть ли другие случаи, которые имеют Object.prototype?

  • "Не -вызываемые функции" всегда имеют Object.prototype. Так ли это?


Я отвечу на некоторые ответы здесь:

Обычная функция:function
Конструктор:constructor
Не -конструктор:method
Не -вызываемый:interface

Это не совсем то, что я ищу. «функция» и «конструктор», конечно, в общем правильны, но я ищу что-то более конкретное («не -функция-конструктор» и т. д. ).

"метод" ничем не лучше "функции" в том, что говорит вам, что его нельзя вызвать с помощью new, а constructorне передает того, что его можно вызывать только с new.

Во многих случаях не -вызываемые функции доступны только из свойства constructorведущего объекта. Я думаю большинство из них правильнее было бы назвать «конструкторами», а не «интерфейсами».


[Материал о хост-объектах и ​​нативных объектах]

Это вроде как на правильном пути. Принимая во внимание этот вопрос(и принятый ответ, а также его комментарии ), кажется, что существуют некоторые разногласия или путаница в отношении того, являются ли определяемые пользователем -функции хост-объектами или собственными объектами.

Чтобы избежать этого, давайте просто вызовем определяемые пользователем -функции UDF и не будем беспокоиться о том, являются ли они хостовыми или собственными. Итак, у нас есть пользовательские функции, хост-объекты и нативные объекты.

  • «Обычные функции»

    • Каждая пользовательская функция

    • Собственные объекты, такие как Object, Stringи т. д.

    • Хост-объекты, такие как window.toString(, протестированы в Chrome 18 ).

  • "Конструктор -работает только"

    • Нет нативных объектов?

    • Хост-объекты, такие как DOMParser, Image.

  • "Не -функции-конструкторы"

    • Собственные объекты, такие как Math.roundи Function.prototype.

    • Хост-объекты типа DOMParser#parseFromString.

  • «Не -вызываемые функции»

    • Нет собственных объектов?

    • Хост-объекты, такие как NodeList, DocumentFragment.

Таким образом, похоже, что может быть связь между хост-объектами и конструктором -только/не -вызываемыми функциями, но host vs native, похоже, не применяется к не -конструктору и обычным функциям.

7
задан Community 23 May 2017 в 11:48
поделиться