2017-07-19 39 views
-2

我有一個關於NodeJS中對象的實例化以及聲明類的不同方法的基本問題。 我見過很少的教程,但沒有教程描述,當我應該使用哪種方式或爲什麼有不同的方式。NodeJS對象實例 - 類或函數

我想創建一個對象的實例,並創建了兩個完全相同但代碼完全不同的代碼片段。

我的問題:我得到相同的結果還是有一些特別的我看不出它是不同的,此外,我應該使用哪種方式?

例A:

class ExampleA { 

    constructor() { } 

    method() { 
     console.log("Hello world"); 
    } 
} 
module.exports.ExampleA = ExampleA; 

例B:

function ExampleB() { 
} 

NoSQL1.prototype.method = function() { 
    console.log("Hello world"); 
} 
module.exports.ExampleB = ExampleB; 

如果我得到它的權利,在例B我剛加入新功能到現有的類 「Classname.prototype.Method」

也許還有更多的方法可以去?作爲一名C#開發人員,我更喜歡ExampleA,目前...

+0

[理解爲什麼真正的原型繼承比古典/僞原型繼承更好的可能的複製,爲什麼我不應該使用「新」](https://stackoverflow.com/questions/20266358/understanding-why-true-prototypal-inheritance-is-better-than-classical-psehero-pr) – Bricky

+0

也[什麼是最好的方法來創建Javascript類?](https://stackoverflow.com/questions/13190097/whats-the-best-way-to-create-javascript-classes/13190493#13190493),[在JavaScript中使用'原型'與'this' ?](https://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript),[Object Orien在JavaScript中提出問題](https://stackoverflow.com/questions/444170/object-oriented-questions-in-javascript) – Bricky

回答

-1

您會得到同樣的結果。 類是ECMAScript(ES)的最新版本中的syntactic sugar。 JavaScript是仍然prototype based,所以你應該小心約refrence上sepcial字this因爲例如:

class ExampleA { 
    constructor() { 
     this.text = 'Hello World!' 
    } 
    method() { 
     console.log(this.text); 
    } 
} 


let a = new EampleA() 
a.method() // will print 'Hello World' 
let m = a.method; 
m() // will throw exception "Cannot read property 'text' of undefined 
let b = {text: 'Hi'}; 
m.call(b) // will print 'Hi' 
0

沒有什麼重大區別。 Javascript沒有傳統的類。一切都只是一個對象,而例子A的語法基本上就是因爲慣例和JavaScript試圖迎合OOP和函數式編程。

但只有第一個模式允許您通過使用閉包來創建私有變量。