Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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
Javascript 节点中带有原型的单例对象_Javascript_Node.js_Singleton_Javascript Objects - Fatal编程技术网

Javascript 节点中带有原型的单例对象

Javascript 节点中带有原型的单例对象,javascript,node.js,singleton,javascript-objects,Javascript,Node.js,Singleton,Javascript Objects,我遇到了下面用node编写的代码,我正在努力理解这些代码。原型和对象本身都有一个方法过程。有什么区别?我理解这种方法是用来为对象创建单例实例的。然而,我想进一步解释或参考这是如何工作的 var singleton; var MyObj = function(opts) {//code} MyObj.prototype = { process: function() {//code} } MyObj.process = function process() { singleton.pr

我遇到了下面用node编写的代码,我正在努力理解这些代码。原型和对象本身都有一个方法
过程
。有什么区别?我理解这种方法是用来为对象创建单例实例的。然而,我想进一步解释或参考这是如何工作的

var singleton;
var MyObj = function(opts) {//code}
MyObj.prototype = {
  process: function() {//code}  
}
MyObj.process = function process() {
  singleton.process();
}
MyObj.init = function init(opts) {
  singleton = new MyObj(opts);
}
module.exports = MyObj;

我将解释每个代码块:

var singleton;
此变量在模块中声明,但未导出。这意味着它是模块专用的,并且存在于闭包中

var MyObj = function(opts) { /* code */ }
这是构造函数

MyObj.prototype = {
  process: function() {//code}  
}
使用
MyObj
构造函数创建的每个实例都有一个
process
方法

MyObj.process = function process() {
  singleton.process();
}
这种方法存在于原型本身。调用时,它执行
单例
对象的
过程
方法。因为
singleton
对象 对于此模块是私有的,对
MyObj.process
的每次调用都会执行同一
singleton
对象的
.process
方法

MyObj.init = function init(opts) {
  singleton = new MyObj(opts);
}
init
方法用于创建
MyObj
原型的实例。此实例被分配给
单例
对象。
singleton
对象是模块的私有对象,因此对
MyObj.init
的每次调用都会操作相同的
singleton
实例,有效地覆盖以前存储在其中的对象。这确保了
singleton
对象始终是
MyObj
的实例

module.exports = MyObj;
构造函数在这里导出。请注意,
singleton
对象未导出

总之


(新的MyObj()).process()
MyObj.process()
执行相同的函数,因为它们使用相同的
singleton
实例。您可以在NodeJS中阅读关于单例的内容,

看起来您可以选择将其用作单例或构造函数。哪一个对你的情况更有效。