31、JS面向对象的基本特征

面向对象的基本特征(封装、继承、多态)

31.1 封装:将数据及其和它相关的行为封装

js如何实现函数私有共有
es5能通过闭包来实现,具体参考高程P187

1. 基于es6的新特性:Symbol类型实现私有变量,私有属性

var Pclass = (function () {
  const a = Symbol('a');
  const m = Symbol('m');
  class Pclass {
    constructor() {
      this[a] = 'a这是私有变量';
      this.b = '变量B-外部可访问';
      this[m] = function () {
        console.log('私有方法');
      }
    }
    getA() {
      console.log(this[a]);
    }
    getM() {
      console.log(this[m]);
    }
  }
  return Pclass
}())

let pc = new Pclass()
console.log(pc)   //打印 Pclass {b: "变量B-外部可访问", Symbol(a): "这是私有变量", Symbol(m): ƒ}

2. 使用ES6扩展的类型WeakMap类型定义

WeakMap类型是一个键-值(key-val)对的集合,只不过他的键(key)只接受对象作为引用,不同于一般的键-值。WeakMap 的使用如下。

const wm = new WeakMap();
const a = {}, b = {};
wm.set(a, '这是a对象键的值');
wm.set(b, '这是b对象键的值');
console.log(wm.get(a)) //打印 这是a对象键的值
console.log(wm.get(b)) //打印 这是b对象键的值
var Pclass = (function () {
  const aa = new WeakMap();
  const mt = new WeakMap();
  class Pclass {
    constructor() {
      this.b = 'b这是公有变量';
      aa.set(this, '私有变量aa')
      mt.set(this, function () {
        console.log('私有方法mt')
      })
    }
    getA() {
      console.log(aa.get(this));
    }
    getM() {
      console.log(mt.get(this));
    }
  }
  return Pclass
}())
let pc = new Pclass()
console.log(pc) // Pclass {b: "b这是公有变量"}

31.2 继承:JS利用原型实现继承

使用原型链的对象关联实现继承

原型链、原型继承和Class继承

31.3 多态

父类的通用行为可以被子类用更特殊的行为重写

实现传入参数不同,函数重载

1. 通过 arguments 对象来实现

function overload() {
  if (arguments.length === 1) {
    console.log('一个参数')
  }
  if (arguments.length === 2) {
    console.log('两个参数')
  }
}

overload(1);      //一个参数
overload(1, 2);  //两个参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值