我有以下几种情况。我正在定义一个新类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 :(得分:0)
如果将helper()
定义为模块中的函数,则它与以下方法中的方法不同:
helper()
时,this
指针不会指向相关对象,因此您无权访问成员变量。helper()
不是对象的方法,因此不能以其他方式使用。如果该功能实际上没有对您对象的属性进行操作,并且您只需要在模块中使用它,那么只需将它作为模块中的函数而不是方法就可以了。
如果你想能够从外部世界调用它,那么它必须在别处定义,如果它确实在对象的属性下运行,那么将它作为对象的公共方法是很自然的
所以,选择哪个取决于需要和情况。
答案 1 :(得分:0)
情景很明显
1)您只想在用于的模块内部提供一些功能 其他部分,并不希望它暴露在外面,只是定义 一个地方的职能。
2)您希望通过模块的引用来使用这些功能,使用 module.prototype将它暴露在外面,所以你可以使用, 修改...它。
Prototype是javascript对象非常重要的属性 详细信息,请参阅How does JavaScript .prototype work?