2014-12-19 71 views
0

我有以下情况。我正在定义一个新类C并将其导出为node模块。我想知道使用普通函数(method 1)与使用原型方法(method 2)之间的区别。使用原型方法与普通函数的区别

似乎没有全局命名空间污染问题(因为它是一个模块内)与method 1的帮手,但实际上method 2通过原型继承暴露了一些内部的东西(这里的helper方法)到外部。

任何其他差异(性能等)?我应该正常使用哪一个?

C.prototype.func=function(){ 
    // need to call helper, use either 
    // helper(); 
    // or 
    // this.helper(); 
} 
function helper(){// method 1 
} 
C.prototype.helper=function(){// method 2 
} 
module.exports = C; 
+0

仅供参考,你不原型喜欢你的表现定义功能。这将是'C.prototype.helper = function(){...}' – jfriend00 2014-12-19 06:29:49

回答

0

如果定义helper()为你的模块内部的功能,那么它在这些方面的方法不同:

  1. 当你调用helper(),该this指针不会指向对象问题,所以你将无法访问成员变量。
  2. helper()不是对象上的方法,所以它不能被别人以这种方式使用。

如果这个函数没有真正对你的对象的属性进行操作,并且你只需要它在你的模块中,那么把它作为模块中的一个函数是有意义的,而不是方法。

如果你想能够从外部世界调用它,那么它必须在其他地方定义,如果它确实在对象的属性中操作,那么将它作为公共方法是很自然的目的。

所以,选择哪个取决于需求和情况。

0

的情况是显而易见的

1)你只是想提供用于其他 零件模块里面的一些功能,不希望它被暴露在外部,刚刚定义 局部功能。 2)你想通过模块的引用来使用函数,使用 module.prototype暴露给外部,所以你可以使用, 修改...它。

原型是JavaScript对象的一个​​非常重要的属性, 细节,你可以参考How does JavaScript .prototype work?