Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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_Design Patterns_Prototypal Inheritance - Fatal编程技术网

使用Javascript有什么好处吗;在这个场景中,什么是原型继承?

使用Javascript有什么好处吗;在这个场景中,什么是原型继承?,javascript,node.js,design-patterns,prototypal-inheritance,Javascript,Node.js,Design Patterns,Prototypal Inheritance,假设我有两个Javascript场景(NodeJS): 场景1: var obj = {}; obj.getAll = function(..) {...}; obj.getOne = function(..){...}; module.exports = obj; var constructor = function(){}; constructor.prototype.findAll = function(..){...}; constructor.prototype.find

假设我有两个Javascript场景(NodeJS):

场景1:

var obj = {};

obj.getAll = function(..) {...};

obj.getOne = function(..){...};

module.exports = obj; 
var constructor = function(){};

constructor.prototype.findAll = function(..){...};

constructor.prototype.findOne = function(..){...};

module.exports = constructor;
我在调用这个模块的代码中使用了
obj

VS的内容大致如下:

场景2:

var obj = {};

obj.getAll = function(..) {...};

obj.getOne = function(..){...};

module.exports = obj; 
var constructor = function(){};

constructor.prototype.findAll = function(..){...};

constructor.prototype.findOne = function(..){...};

module.exports = constructor;
在调用此模块的代码中,我根据需要从
constructor
创建一个对象并使用它


场景2比场景1有什么优势吗

就内存使用或性能而言,答案是“可以忽略不计”。由于您只是创建一个对象,无论您需要多少次模块,您都会得到相同的实例(模块缓存的b/c)

在这之后,它只是归结到您希望模块的接口是什么


就我个人而言,我认为本例中的原型继承模式似乎有点奇怪,并且没有看到任何好处。

它们不是等价的。第一个:
require('module')。getAll()
第二个:
new(require('module'))。findAll()
。这是否是你想要的取决于你的判断。@RobW:我理解其中的区别。我的问题是,场景2在内存使用、性能或维护等方面是否比场景1有任何优势?这取决于您想对模块做什么。@Qantas94Heavy:您能详细说明一下吗?很明显,我需要这个模块,并在代码的其他部分使用它!:)是的,的确如此!例如,像jQuery或XMLHttpRequest包装器这样的东西作为构造函数可能会更好,而像JSON模块这样的东西(假装它不存在)作为对象可能会更好。事实上,将代码放入模块并不会显著改变您在这方面的选择。