JavaScript类和模块

在JavaScript中,类的实现是基于原型继承机制的。如果两个实例都从同一个原型对象上继承了属性,它们是同一个类的实例。ES5给属性特性增加了方法支持(getter、setter、可枚举型、可写性和可配置性),而且增加了对象可扩展性的限制。

构造函数,从某种意义上讲,定义构造函数即是定义类,所以构造函数名首字母要大写,而普通的函数都是首字母小写。但是这个函数有两点局限性:只是通过函数名来判断函数是否存在,而没有关注细节信息(函数参数、参数类型等)。不能应用于内置类型,因为内置类型的方法是不可枚举的。

关于类的标识,原型对象是类的唯一标识,如果两个构造函数的prototype属性指向同一个原型对象,那么这两个构造函数创建的实例是属于同一类的。 构造函数通常用做类名,当使用instanceof运算符来检测对象是否属于某个类时会用到构造函数。

今天看JavaScript第九章看到中间部分有一个叫鸭式辩型的东西,什么叫鸭式辩型呢?


上面提到的各种技术都有些问题,规避掉这些问题的办法是:不要关注”对象的类是什么”,而是关注”对象能做什么”这种思考问题的方式在python和ruby中非常普遍,被称为“鸭式辨型”。(像鸭子一样走路、游泳并且嘎嘎叫的鸟就是鸭子)。

对于javascript程序员来说,“如果一个对象可以像鸭子一样走路、游泳并且嘎嘎叫,就认为这个对象就是鸭子,哪怕它并不是从鸭子类的原型对象而继承而来的”

这个函数有两点局限性:只是通过函数名来判断函数是否存在,而没有关注细节信息(函数参数、参数类型等)。不能应用于内置类型,因为内置类型的方法是不可枚举的。


无聊和困惑的时候可以多逛逛CSDN和博客园、开源中国等优秀的网站。看看大神们写的博客,就算一开始不会写,但是看得多了也会有一定的经验积累。偶尔看到一篇比较适合小白初步学习JavaScript类和模块的一段代码,分享如下:https://blog.csdn.net/weixin_34221332/article/details/88433625

模块

将代码组织到类中的一个重要原因是,让代码更加“模块化”,可以在很多不同场景中实现代码的重用。但类不是唯一的模块化代码方式。一般来讲,模块是一个独立的javascript文件。模块文件可以包含一个类定义、一组相关的类、一个使用函数库或者是一些待执行的代码。只要以模块的形式编写代码。

任何javascript代码段就可以当做一个模块,javascript中并没有定义用于支持模块的语言结构(但imports和exports的确javascript保留的关键字,因此javascript的未来版本可能会支持),这也意味着在javascript中编写模块化的代码更多是遵循某一种代码约定。


有志者事竟成,加油,You can do better !

你可能感兴趣的:(JavaScript类和模块)