Javascript NodeJS从另一个节点调用原型

Javascript NodeJS从另一个节点调用原型,javascript,node.js,prototype,node-modules,prototypal-inheritance,Javascript,Node.js,Prototype,Node Modules,Prototypal Inheritance,当我试图在同一对象上使用另一种方法时,我一直认为X不是一个函数。测试代码如下: 目标1: "use strict" let Mod1OBJ = function () {} Mod1OBJ.prototype.first = function first () { console.log('first') } exports.Mod1OBJ = new Mod1OBJ() 目标2: "use strict" const { Mod1OBJ } = require(`./mod1.j

当我试图在同一对象上使用另一种方法时,我一直认为
X
不是一个函数。测试代码如下:

目标1:

"use strict"

let Mod1OBJ = function () {}

Mod1OBJ.prototype.first = function first () {
  console.log('first')
}

exports.Mod1OBJ = new Mod1OBJ()
目标2:

"use strict"

const { Mod1OBJ } = require(`./mod1.js`)

let Mod2OBJ = function () {}

Mod2OBJ.prototype.second = function second () {
  Mod2OBJ.deferred()
  console.log('second')
}

Mod2OBJ.prototype.deferred = function deferred () {
  Mod1OBJ.first()
  console.log('deferred')
}

exports.Mod2OBJ = new Mod2OBJ()
Index.js:

"use strict"

const { Mod2OBJ } = require(`./lib/pack1/mod2.js`)
Mod2OBJ.deferred()
Mod2OBJ.second()
执行时:

first
deferred
/path to file/mod2.js:8
Mod2OBJ.deferred()
          ^
TypeError: Mod2OBJ.deferred is not a function
显然,“deferred”是
Mod2OBJ
上的一个函数,但在同一对象的另一个方法中调用时不是


我原以为我了解如何使用模块/需求/原型,但很明显,我不知道——我正在竭尽全力找出我做错了什么?非常感谢您的帮助。

当您创建一个对象实例时,原型的所有属性都会复制到该对象。如果要在创建对象实例之前访问,可以使用
prototype
this

试试这个:

Mod2OBJ.prototype.second = function second () {
  Mod2OBJ.prototype.deferred()
  console.log('second')
}
Mod2OBJ.prototype.second = function second () {
  this.deferred()
  console.log('second')
}
编辑==== 第二种方式:

Mod2OBJ.prototype.second = function second () {
  Mod2OBJ.prototype.deferred()
  console.log('second')
}
Mod2OBJ.prototype.second = function second () {
  this.deferred()
  console.log('second')
}

好主意,但我现在得到了:Mod2OBJ.prototype.deferred()^TypeError:无法读取未定义的属性'deferred',因为您拼写了错误
prototype
。您应该使用
prototype
DOH!-好的,是的,这很有效。谢谢我仍然不能完全确定为什么我需要在那一点上引用原型,但我不想与它争论-它是有效的。因为,当你创建Mod2OBJ实例时,原型的属性被复制到对象上。到目前为止,原型功能还不可用。如果要从实例的另一个方法中访问实例的方法,可以使用
this
。编辑答案。感谢您的解释;我已经尝试过“this”实验,并使其工作,但是在“真实世界”中,外部调用代码可能来自eventEmitter,因此“this”不会是对象本身。