javascript - 当函数的行为类似于类但不使用 class 关键字或 "new"关键字(在 Javascript 中)时,它被称为什么?

标签 javascript function class constructor terminology

我浏览了 suggested链接,但似乎找不到一个函数的术语,它像一个类(它是构造函数吗?也没有那个关键字!)但不使用 new 关键字,也不是 class

我在我的代码中同时使用了这个示例的模式和类模式,但我意识到我不知道如何描述前者。

我认为这部分是因为我最近学习了 JS,看到了很多 class,但翻阅了我对 not-ES5,6,7 的笔记,2018,2020 等我这辈子都找不到var aCounter = counterFunction() 是什么。

我知道我正在做的事情的结果是什么,如何工作等等,但为什么没有constructor(),没有new,没有,没有etc.prototype.etc模式?我知道我正在创建一个对象,调用对象中现有的方法等。我相信我开始漫无目的了。

罗,举个例子

const counterFunction = () => {
    let val = 0

    return { 
      increment() { val++ }, 
      getVal() { return val }
    }
}

这是||可以像这样实例化(?):

let aCounter = counterFunction() // where i'm getting tripped up

和工作方式一样

aCounter.increment() // 1
aCounter.increment() // 2
aCounter.getVal() // 2 

我知道这是乱七八糟的,但请帮忙!我认为一旦这个词汇拼图被放置到位,它会让内部的东西更多地点击!

最佳答案

这只是一个返回对象文字的函数,它不像一个类(没有原型(prototype),正如您所指出的,不使用 new 等)。

设置为该对象(存储在 aCounter 中)属性的函数看起来像类方法,因为它们保留对变量 val 的引用活着,但这并不是因为 val 以任何方式与实际对象相关联。

相反,这些函数是 closures只要函数本身还活着,就可以保持对变量的引用。

因此,为了回答您的问题,您所描述的内容并没有具体的名称。它只是一个返回对象的函数。

编辑:

您问为什么此模式中没有constructor() 或相关语法。 JavaScript 中的对象文字只是名称和值的映射:

const x = { a: 3, b: "hello" };

您不需要构造函数,并且没有原型(prototype),因为它不是使用构造函数实例化的。另一方面,类和构造函数是稍后创建的对象的模板,这些对象确实有原型(prototype)和构造函数,因为模板包含初始化逻辑对象。

class A
{
    constructor() 
    {
        this.a = new Date();
        this.b = this.a.toString(); // you cannot do this in an object literal
    }
}

const x = new A();

关于javascript - 当函数的行为类似于类但不使用 class 关键字或 "new"关键字(在 Javascript 中)时,它被称为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54192311/

相关文章:

javascript - 使用函数将多个输入推送到单独的 div 中?

bash - 将参数传递给 Bash 函数

c - 我如何从c中的函数返回多个值

javascript - "Assertion failed: you need to wait for the runtime to be ready"在JavaScript中调用C函数时出错

javascript - Angular 2 登录指令和 location.createComponent

javascript - 如何在服务器脚本中从另一个表中选择数据?微软Azure

java - 用java序列化员工列表

C++:如何在启动时创建类的集合

c++ - 在命名空间中定义类的方法

javascript - 如何使用 ES6 在 AngularJs 中进行依赖注入(inject)?