我有一个关于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;
如果我做对了,在ExampleB中我只是在" Classname.prototype.Method"
中的现有类中添加一个新函数。也许还有更多的方法可去?作为C#开发人员,我更喜欢ExampleA,目前......
答案 0 :(得分:0)
没有重大区别。 Javascript没有传统的类。一切都只是一个对象,例子A的语法基本上就是因为约定和Javascript试图迎合OOP和函数式编程。
但只有第一种模式允许你通过使用闭包来创建私有变量。
答案 1 :(得分:-1)
你得到相同的结果。
在最新版本的syntactic sugar(ES)中,类是ECMAScript。
JavaScript仍然是prototype based,因此您应该注意对特定字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'