在Javascript中理解类关键字

在Javascript中理解类关键字,javascript,class,object,constructor,ecmascript-6,Javascript,Class,Object,Constructor,Ecmascript 6,我最近进入了ES6,终于认真地学习了课程。我读到类只是Javascript中对象的掩护,然而,我发现语法最让人不舒服 请有人解释/指向一个参考,他们在那里解释,类是如何模拟的&重要的是,我们如何将它们映射到我们心目中的Javascript对象操作方式 class NoteStore { constructor() { this.bindActions(NoteActions); this.notes = []; } } 根据上面的示例代码,我认为类只是构造函数,但是构

我最近进入了ES6,终于认真地学习了课程。我读到类只是Javascript中对象的掩护,然而,我发现语法最让人不舒服

请有人解释/指向一个参考,他们在那里解释,类是如何模拟的&重要的是,我们如何将它们映射到我们心目中的Javascript对象操作方式

class NoteStore {
  constructor() {
    this.bindActions(NoteActions);

    this.notes = [];
  }
}
根据上面的示例代码,我认为类只是构造函数,但是构造函数在构造函数中做什么呢

作为一个开始学习使用Js编程的人,我发现添加类(也是React的类)对Js来说是一个可怕的添加,所以任何帮助都是很棒的


感谢

经典的基于类的编程是基于定义一个类,该类包含构造函数方法和将由构造对象继承的其他方法。正如您在示例中所展示的那样编写:该类使用其名称定义,然后包含构造函数,然后包含其他函数

类定义中的构造函数方法有些特殊,因为它在对象构造时被调用。因为它是特殊的,所以需要以某种方式标记它,这是通过将它命名为
constructor
来完成的

在经典的Javascript(基于原型的OOP)中,其工作原理不同:对象构造函数是一个简单的函数,每个对象实例继承的方法都在该函数的
.prototype
属性的对象上定义。在基于原型的OOP中,构造函数没有什么特别之处,它只是一个函数,真正的魔力在于
new
关键字以及在构建对象时使用
this

用构造函数方法以
的形式表达这一点仅仅是为了迎合经典的OOP开发人员,并且可以说提供了更紧凑的语法

class NoteStore {
  constructor() {
    this.bindActions(NoteActions);
    this.notes = [];
  }

  bindActions(actions) {
    ..
  }
}
这在简单Javascript中表示为:

function NoteStore() {
  this.bindActions(NoteActions);
  this.notes = [];
}

NoteStore.prototype.bindActions = function (actions) {
  ..
}
我认为问题很清楚。
class
关键字只是旧式OOP实现的一个新名称,我们使用函数构造函数来获得相同的功能

<代码>类< /COD>关键字被引入JavaScript,使其更类似于其他传统的面向对象语言,如C++、java。但它的核心仍然是函数构造函数,几乎没有变化

对于您的问题“构造函数在构造函数下做什么”,ES6已经对旧版本做了一些修改,这样类就不会充当examaple类的构造函数,不能直接调用(没有新关键字),如

这将在ES6中引发错误,但如果它是像ES5中那样的函数构造函数,那么它的工作原理将使您面临bug的风险。班级也不悬挂

有关更多详细信息和示例,请阅读。

JS
class
关键字: Javascript有一个称为原型继承的继承系统。这是一个系统,对象从其他对象继承属性。当使用
new
关键字调用函数时,使用它创建的新对象将从构造函数的prototype属性“继承”属性

JS
class
关键字只是构造器函数的语法糖。
class
关键字只是有不同的语法,但它基本上实现了使用原型创建对象的相同目标。以以下代码段为例:

类人类{
建造师(姓名){
this.name=名称;
}
speak(){console.log('hi')}
};
控制台日志(人的类型);
//logs函数,一个类只是一个隐藏的构造函数
const me=新人类(“威廉”);
log(Object.getPrototypeOf(me)==human.prototype);
//如果为true,则对象me引用了human.prototype对象。
我说;
//此speak方法位于对象的原型上,而不是对象本身
console.log(me.hasOwnProperty('speak'));//日志错误

console.log(human.prototype.hasOwnProperty('speak'));//logs true
es6类是语法糖,类是一个带有原型对象的构造函数,就像它一直以来一样。仅作为一个适当的句法单位。在您的示例中,原型是空的。您认为它们的语法有什么问题?您是否学习了如何在ES5中使用类和创建继承层次结构,以及您是否在代码中使用了它们?“我读到类只是Javascript中对象的掩护”,而“我认为类只是构造函数”。所以要么你不相信你读到的,要么你自相矛盾。“我发现添加类是一个可怕的添加”这是一个奇怪的说法,考虑到你还不知道类。哈哈,这个问题是垃圾。我不明白。这太糟糕了。谢谢@AshutoshSharma,我确实读过MDN。再读一遍,我仍然不清楚“静态”“超级”之类的东西。是的,2uality非常棒,谢谢。感谢@deceze对发布代码的清晰解释和分解。
NoteStore();