NodeJS 从另一个调用原型

NodeJS calling prototype from another

尝试对同一对象使用另一种方法时,我不断收到 X is not a function。测试代码如下:

对象 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 上的函数,但在同一对象的另一个方法中调用时不是。

我以为我了解如何使用 modules/require/prototyping 但很明显,我不知道 - 我正在努力找出我做错了什么?非常感谢任何帮助。

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

试试这个:

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

已编辑 ======= 第二种方式:

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