热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

JavaScript基础知识:Class基本语法(一)JavaScript基础知识:Class静态属性和静态方法(二)一、内部接口和外部接口1

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, 在此学习记录!


推荐阅读
author-avatar
我想去海边6_414
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有