NodeJS从另一个调用原型

时间:2018-07-19 12:33:57

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

我以为我了解如何使用模块/需求/原型,但是显然,我不知道-我正在拔头发试图找出我做错了什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

当创建对象的实例时,原型副本的所有属性随后将复制到该对象。如果要在创建对象实例之前进行访问,则可以使用prototypethis

尝试一下:

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

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

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