节点中具有原型的单例对象
Singleton objects with prototype in node
我遇到了下面用节点编写的代码,我正在尝试理解这些代码。有一个方法 process
附加到原型和对象本身。有什么不同?我了解该方法用于为对象提供单例实例。但是想要进一步解释或参考这是如何工作的。
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
对象的 process
方法。因为 singleton
对象
对于这个模块是私有的,每次调用 MyObj.process
都会执行同一个 singleton
对象的 .process
方法。
MyObj.init = function init(opts) {
singleton = new MyObj(opts);
}
init
方法用于创建MyObj
原型的实例。此实例分配给 singleton
对象。 singleton
对象是模块私有的,因此每次调用 MyObj.init
都会操作同一个 singleton
实例,有效地覆盖之前存储在其中的对象。这确保 singleton
对象始终是 MyObj
.
的实例
module.exports = MyObj;
此处导出构造函数。请注意,singleton
对象未导出。
总结
(new MyObj()).process()
和 MyObj.process()
执行相同的功能,因为它们使用相同的 singleton
实例。您可以在 NodeJS here and here
中阅读有关单例的信息
我遇到了下面用节点编写的代码,我正在尝试理解这些代码。有一个方法 process
附加到原型和对象本身。有什么不同?我了解该方法用于为对象提供单例实例。但是想要进一步解释或参考这是如何工作的。
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
对象的 process
方法。因为 singleton
对象
对于这个模块是私有的,每次调用 MyObj.process
都会执行同一个 singleton
对象的 .process
方法。
MyObj.init = function init(opts) {
singleton = new MyObj(opts);
}
init
方法用于创建MyObj
原型的实例。此实例分配给 singleton
对象。 singleton
对象是模块私有的,因此每次调用 MyObj.init
都会操作同一个 singleton
实例,有效地覆盖之前存储在其中的对象。这确保 singleton
对象始终是 MyObj
.
module.exports = MyObj;
此处导出构造函数。请注意,singleton
对象未导出。
总结
(new MyObj()).process()
和 MyObj.process()
执行相同的功能,因为它们使用相同的 singleton
实例。您可以在 NodeJS here and here