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

成员私有化

成员私有化实际就是让一些成员不能被外部访问

实现这个目的有两种方法

  1. 成员名不可见
  2. 使成员无法在对象上访问

使用 Symbol 类型的数据时,就可以实现成员名不可见。

数据类型 “symbol” 是一种原始数据类型,该类型的性质在于这个类型的值可以用来创建匿名的对象属性。该数据类型通常被用作一个对象属性的键值——当你想让它是私有的时候。

Symbol 的值在控制台上都会被统一显示成为 Symbol(),但是每个 Symbol() 创建的值都是唯一的,同时你也无法简单找到 Symbol 的真实值

技术图片

使用弱映射(WeakMap)就可以不将属性挂在对象上,而是使用一个键值对,将对象与属性值对应

可以注意到在定义函数成员时使用了,[_draw] 其中 [] 的作用是告诉编译器,读取这个变量中的值作为成员名,这是ES6中的新增特性

WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。

技术图片

和以前需要在 Object.defineProperty 中定义属性特性不同,ES6中可以直接使用 get set 关键字定义 gettersetter

继承

使用extends 继承

在类中定义 constructor 函数,作为构造函数

在子类中需要访问父类时,使用 super 关键字

在子类中也定义了构造函数的时候,需要在构造函数的第一行调用父类的构造函数,也就是使用 super() 方法

访问父类方法属性,也就是 super.XXX

以上是关于JS的面向对象的主要内容,如果未能解决你的问题,请参考以下文章

js代码片段

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

JS代码预解析原理函数相关面向对象

node.js 是面向对象的么

js 面向对象代码