zoukankan      html  css  js  c++  java
  • JS的面向对象

    js的类

    JS中的面向对象是通过原型链模拟实现的

    创建类使用 class 关键字

    而类声明和类表达式都不会被置顶

    const Square = class {} //类表达式
    

    静态方法

    定义静态方法使用 static 关键字

    static 关键字实际上就是将方法挂载构造函数上

    class Circle {
      static s() {}
    }
    console.log(new Circle());
    

    image-20200414141247882

    this

    函数中的 this 始终指向调用它的对象,也就是说和其他语言不同,函数的 this 是由调用者决定的

    在严格模式时,this 默认不会指向 window

    成员私有化

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

    实现这个目的有两种方法

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

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

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

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

    image-20200414143007234

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

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

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

    image-20200414144841056

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

    继承

    使用extends 继承

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

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

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

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

  • 相关阅读:
    搜索1009
    搜索1004
    Java文件操作
    搜索1007
    连接查询
    SQL学习——数据类型
    SQL学习——基本语法
    <转载>GIS数据下载网站大全
    DOM查询练习
    day09【继承、super、this、抽象类】
  • 原文地址:https://www.cnblogs.com/freesfu/p/12698158.html
Copyright © 2011-2022 走看看