不同类型功能的术语

Dag*_*bit 7 javascript constructor terminology function

在JavaScript中似乎有几个不同的"组"类似函数的东西.以下是我的名字:

  • "常规函数":这些函数可以用parens和new.大多数功能都属于这一类.

  • "仅构造函数":这些函数new仅可调用.例如,Image,DOMParser等.

  • "非构造函数":这些函数可以用parens调用,但不能用new.例如Math.round,Function.prototype.

  • "不可调用函数":这些函数根本不可调用.例如,window.constructor,Document,NodeList,等.

这些不同功能组的专有名称是什么?


我还试图弄清楚函数所在的"组"是否可以根据其[[Prototype]](__proto__)属性是否设置来确定Function.prototype.

  • 大多数"常规功能"都有Function.prototype,但可以使用非标准功能删除__proto__.

  • 大多数"仅构造函数"具有Object.prototype.我找不到他们所拥有的任何情况Function.prototype(所以,没有callapply).这总是情况/规格行为吗?

  • "非构造函数"似乎主要Function.prototype与其Function.prototype自身有关.还有其他案例Object.prototype吗?

  • "不可赎回的功能"似乎总是如此Object.prototype.是这样的吗?


我会在这里回答一些答案:

常规函数:function
构造函数:constructor
非构造函数:method
不可调用:interface

这不是我真正想要的."函数"和"构造函数"当然是正确的,但我正在寻找更具体的东西("非构造函数"等).

"方法"并不比"函数"更好地告诉你它不能被调用new,并且constructor没有得到指出它只能被调用new.

在许多情况下,只能从constructor宿主对象的属性访问不可调用的函数.我认为大多数这些更准确地称为"构造函数"而不是"接口".


[关于主机对象与本机对象的东西]

这有点走上正轨.考虑到这个问题(以及接受的答案及其评论),似乎对用户定义的函数是主机还是本机对象存在一些分歧或混淆.

为了避免这种情况,我们只需调用用户定义的函数UDF,而不用担心它们是主机还是本机.所以我们有UDF,宿主对象和本机对象.

  • "常规功能"

    • 每个UDF

    • 本地对象一样Object,String等等.

    • 主机对象window.toString(在Chrome 18中测试).

  • "仅构造函数"

    • 没有原生物体?

    • 主机对象一样DOMParser,Image.

  • "非构造函数"

    • Math.round和的原生对象Function.prototype.

    • 主机对象如DOMParser#parseFromString.

  • "不可调用的函数"

    • 没有原生物体?

    • 主机对象一样NodeList,DocumentFragment.

因此看起来主机对象和仅构造函数/不可调用函数之间可能存在连接,但主机与本机似乎不适用于非构造函数和常规函数.

Fel*_*ahm 0

我认为您所要求的内容没有正式命名,但通常这是人们在任何编程语言中调用所有这些函数的方式:

  • 常规功能:function
  • 构造函数: constructor
  • 非构造函数:method
  • 不可调用:(interface对于 JS,这是指较低级别的原生对象)