JS的面向对象
Posted 秦晓的blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS的面向对象相关的知识,希望对你有一定的参考价值。
js的类
JS中的面向对象是通过原型链模拟实现的
创建类使用 class
关键字
而类声明和类表达式都不会被置顶
const Square = class {} //类表达式
静态方法
定义静态方法使用 static
关键字
static
关键字实际上就是将方法挂载构造函数上
class Circle {
static s() {}
}
console.log(new Circle());
this
函数中的 this
始终指向调用它的对象,也就是说和其他语言不同,函数的 this
是由调用者决定的
在严格模式时,this
默认不会指向 window
成员私有化
成员私有化实际就是让一些成员不能被外部访问
实现这个目的有两种方法
- 成员名不可见
- 使成员无法在对象上访问
使用 Symbol
类型的数据时,就可以实现成员名不可见。
数据类型 “symbol” 是一种原始数据类型,该类型的性质在于这个类型的值可以用来创建匿名的对象属性。该数据类型通常被用作一个对象属性的键值——当你想让它是私有的时候。
Symbol
的值在控制台上都会被统一显示成为 Symbol()
,但是每个 Symbol()
创建的值都是唯一的,同时你也无法简单找到 Symbol
的真实值
使用弱映射(WeakMap)就可以不将属性挂在对象上,而是使用一个键值对,将对象与属性值对应
可以注意到在定义函数成员时使用了,[_draw]
其中 []
的作用是告诉编译器,读取这个变量中的值作为成员名,这是ES6中的新增特性
WeakMap
对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
和以前需要在 Object.defineProperty
中定义属性特性不同,ES6中可以直接使用 get
set
关键字定义 getter
和 setter
继承
使用extends
继承
在类中定义 constructor
函数,作为构造函数
在子类中需要访问父类时,使用 super
关键字
在子类中也定义了构造函数的时候,需要在构造函数的第一行调用父类的构造函数,也就是使用 super()
方法
访问父类方法属性,也就是 super.XXX
以上是关于JS的面向对象的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段12——JavaScript的Promise对象