JavaScript基础知识:Class 其它(三)

JavaScript基础知识:Class 基本语法(一)
JavaScript基础知识:Class 静态属性和静态方法(二)


一、内部接口和外部接口

1)在面向对象的编程中,属性和方法有两组:

  • 内部接口:可以通过该类的其他方法访问,不能从类的外部访问的属性和方法;
  • 外部接口:也可以从类的外部访问方法和属性

就面向对象编程(OOP)而言,内部接口与外部接口的划分被称为 封装。

2)在** javascript ** 中,有两种类型的对象字段(属性和方法):

  • 公共的:可以从任何地方访问。它们构成了 外部接口
  • 私有的:只能从类的内部访问。它们构成了 内部接口

3)为了隐藏内部接口,我们使用受保护的或私有的属性:

  • 受保护的属性通常以下划线 _ 作为前缀。
  • 私有字段以 # 开头。 JavaScript 确保我们只能从类的内部访问它们

注意:

目前,各个浏览器对私有字段的支持不是很好,但可以用 polyfill 解决。

二、扩展内建类

内建的类,例如 Array,Map 等也都是可以扩展的(extendable)。

看个使用的例子:

class PowerArray extends Array{
    isEmpty(){
        return this.length === 0;
    }
}

let arr = new PowerArray(1,2,30,4,10);
console.log(arr);
console.log(arr.isEmpty());

let filteredArr = arr.filter(item => item>=10);
console.log(filteredArr);
console.log(filteredArr.isEmpty());

在这里插入图片描述

注意:内建类没有静态方法继承

例如,Array 和 Date 都继承自 Object,所以它们的实例都有来自 Object.prototype 的方法。但 Array.[[Prototype]] 并不指向 Object,所以它们没有例如 Array.keys()(或 Date.keys())这些静态方法。

类检查:“instanceof”

instanceof 操作符用于检查一个对象是否属于某个特定的 class。同时,它还考虑了继承。
如果 obj 隶属于 Class 类(或 Class 类的衍生类),则返回 true。

语法:

obj instanceof Class   //返回true/false

例如:

class Rabbit {}
let rabbit = new Rabbit();

// rabbit 是 Rabbit class 的对象吗?
alert( rabbit instanceof Rabbit ); // true

//下面这个例子特殊些
//通常,instanceof 在检查中会将原型链考虑在内
//因为从原型上来讲,Array 是继承自 Object 的,所以都为true
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true

Mixin 模式

  • javascript 中,只能继承一个对象;
  • 每个对象又只能有一个 [[prototype]];
  • 每个类只可以扩展另一个类;

有时候,这种单继承会让人受到限制,
例如,我有一个 StreetSweeper 类和一个 Bicycle 类,现在想要一个它们的 mixin:StreetSweepingBicycle 类。
这时候我们就需要用到 mixin,一个包含其他类的方法的类。
JavaScript 不支持多重继承,但是可以通过将方法拷贝到原型中来实现 mixin。

以上内容参考于 https://zh.javascript.info/private-protected-properties-methods, 在此学习记录!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值