Javascript 不同类型功能的术语

Javascript 不同类型功能的术语,javascript,function,constructor,terminology,Javascript,Function,Constructor,Terminology,在JavaScript中,似乎有几个不同的类似函数的“组”。以下是我为他们编造的名字: “常规函数”:可以使用paren和new调用这些函数。大多数功能都属于这一类 “仅构造函数函数”:这些函数只能通过new调用。例如,Image,DOMParser,等等 “非构造函数”:这些函数可以用paren调用,但不能用new调用。例如,Math.round,Function.prototype “不可调用函数”:这些函数根本不可调用。例如,window.constructor,Document,Nod

在JavaScript中,似乎有几个不同的类似函数的“组”。以下是我为他们编造的名字:

  • “常规函数”:可以使用paren和
    new
    调用这些函数。大多数功能都属于这一类

  • “仅构造函数函数”:这些函数只能通过
    new
    调用。例如,
    Image
    DOMParser
    ,等等

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

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

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


我还试图弄清楚,是否可以根据函数的
[[Prototype]]
\uuuu proto\uuuu
)属性是否设置为
function.Prototype
)来确定函数属于哪个“组”

  • 大多数“常规函数”将具有
    函数。原型
    ,但可以使用非标准的
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    将其删除

  • 大多数“构造函数专用函数”都有
    对象.prototype
    。我找不到它们有
    功能的任何情况。原型
    (因此,没有
    调用
    应用
    )。这是否始终是案例/规范行为

  • “非构造函数函数”似乎大部分都有
    函数.prototype
    ,除了
    函数.prototype
    本身。是否有其他案例具有
    对象.原型

  • “不可调用函数”似乎总是有
    对象。原型。是这样吗


我将在这里回答一些问题:

常规功能:
功能

构造函数:
Constructor

非构造函数:
方法

不可调用:
接口

这不是我真正想要的。“函数”和“构造函数”在一般情况下当然是正确的,但我正在寻找更具体的(“非构造函数”等)

在告诉您不能使用
new
调用它时,“方法”并不比“函数”好,而且
constructor
也没有说明只能使用
new
调用它

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


[关于主机对象与本机对象的内容]

这是在正确的轨道上。考虑到(以及公认的答案及其注释),对于用户定义的函数是宿主对象还是本机对象,似乎存在一些分歧或混淆

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

  • “常规函数”

    • 每个UDF

    • 本机对象,如
      对象
      字符串

    • 宿主对象,如
      window.toString
      (在Chrome18中测试)

  • “仅构造函数函数”

    • 没有本机对象

    • 宿主对象,如
      DOMParser
      Image

  • “非构造函数函数”

    • 本机对象,如
      Math.round
      Function.prototype

    • 宿主对象,如
      DOMParser#parseFromString

  • “不可调用函数”

    • 没有本机对象

    • 宿主对象,如
      NodeList
      DocumentFragment


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

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

  • 常规功能:
    功能
  • 构造函数:
    Constructor
  • 非构造函数:
    方法
  • 不可调用:
    接口
    (对于JS,这指的是较低级别的本机对象)

我认为您在这里了解到的是内置于EcmaScript中的本机对象和由开发人员创建和提供的主机对象之间的细微差别

“常规函数”映射到宿主对象,也就是说,使用JS和“仅构造函数”创建的函数、非构造函数函数和“不可调用函数”映射到语言中较低级别的本机对象


你和你的术语问题又来了!:)嘿,这一次让我困扰了好几天。我不知道我是不是在编一个没有的人工类别,但我想把它叫做什么。这是对面向对象JavaScript的一个很好的介绍,它应该能回答你的问题。@sp00m它根本不能回答。我想这是个问题这篇文章令人困惑,我会想办法改写它。