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”不会是对象本身。