Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Nodejs生成器类函数不是函数_Node.js - Fatal编程技术网

Node.js Nodejs生成器类函数不是函数

Node.js Nodejs生成器类函数不是函数,node.js,Node.js,我有一个自定义类,使用Node JS builder创建一个包含可能存在或不存在的变量的类,还有一个自定义函数,用于验证相等性(覆盖默认的equalsnodejs函数)。该类用于业务目的,因此所有实际数据都已模糊 课程 我使用new关键字调用我的自定义类,因此它应该实例化一个新类,然后我尝试调用equals函数,如上所述,如下所示: 代码 我的输出是通过终端窗口进行的,因此告诉我myUser.equals不是一个函数,如下所示: 终端 (节点:8376)未处理的PromisejectionWar

我有一个自定义类,使用Node JS builder创建一个包含可能存在或不存在的变量的类,还有一个自定义函数,用于验证相等性(覆盖默认的
equals
nodejs函数)。该类用于业务目的,因此所有实际数据都已模糊

课程

我使用
new
关键字调用我的自定义类,因此它应该实例化一个新类,然后我尝试调用
equals
函数,如上所述,如下所示:

代码

我的输出是通过终端窗口进行的,因此告诉我
myUser.equals不是一个函数
,如下所示:

终端

(节点:8376)未处理的PromisejectionWarning:TypeError:myUser.equals不是函数
在HttpRequest.get.then(/Users/sam.levene/projects/public\u api\u tests/custom\u classes/ApiServices.js:40:28)
在
在进程中。_tick回调(内部/process/next_tick.js:188:7)
(节点:8376)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:1)
(节点:8376)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

您在这里使用上下文对象(
this
)真的让自己绊倒了

我不认为你在这里做的是最好的方法。基本上,一旦你创建了那个对象

return {
    withTitle: function (n) {
        this.title = n;
        return this
    },
您正在创建一个新的上下文。这就是为什么
equals
未定义的原因。如果您
console.log(this,this.equals)
在其中一个setter中,您就会明白我的意思

更好的方法是:

class UserFactory
    getInstance({ title, firstname, lastname, ... })
以及实现
等于

class User
    constructor({ title, firstname, lastname, ... })
    equals()

你能进一步阐述你的建议吗?你想知道什么用户类和用户工厂接口是如何实现的?工厂创建用户的实例。老实说,这似乎没有必要,除非你想拥有不同类型的用户。你有一个真正的用例吗?否则直接实例化用户即可。
新用户({firstname,lastname,email})
。然后你的
equals
方法会将
this.firstname
otherUser.firstname
进行比较,它会正常工作。我明白了,这是类中的一种类;明白了。星期一我会试试这个。悲哀地由于与工作相关的限制,我无法展示真实的用例,但如果您的建议有效,我会让您知道。
return {
    withTitle: function (n) {
        this.title = n;
        return this
    },
class UserFactory
    getInstance({ title, firstname, lastname, ... })
class User
    constructor({ title, firstname, lastname, ... })
    equals()