使用原型方法与普通函数的差异

时间:2014-12-19 06:24:27

标签: javascript node.js

我有以下几种情况。我正在定义一个新类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;

2 个答案:

答案 0 :(得分:0)

如果将helper()定义为模块中的函数,则它与以下方法中的方法不同:

  1. 当您致电helper()时,this指针不会指向相关对象,因此您无权访问成员变量。
  2. helper()不是对象的方法,因此不能以其他方式使用。
  3. 如果该功能实际上没有对您对象的属性进行操作,并且您只需要在模块中使用它,那么只需将它作为模块中的函数而不是方法就可以了。

    如果你想能够从外部世界调用它,那么它必须在别处定义,如果它确实在对象的属性下运行,那么将它作为对象的公共方法是很自然的

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

答案 1 :(得分:0)

情景很明显

  

1)您只想在用于的模块内部提供一些功能   其他部分,并不希望它暴露在外面,只是定义   一个地方的职能。

     

2)您希望通过模块的引用来使用这些功能,使用   module.prototype将它暴露在外面,所以你可以使用,   修改...它。

Prototype是javascript对象非常重要的属性  详细信息,请参阅How does JavaScript .prototype work?