2014-12-19 72 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?