2017-07-19 96 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和函数式编程。

但只有第一个模式允许您通过使用闭包来创建私有变量。