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
例如:
class Rabbit {}
let rabbit = new Rabbit();
alert( rabbit instanceof Rabbit );
let arr = [1, 2, 3];
alert( arr instanceof Array );
alert( arr instanceof Object );
Mixin 模式
- 在 Javascript 中,只能继承一个对象;
- 每个对象又只能有一个 [[prototype]];
- 每个类只可以扩展另一个类;
有时候,这种单继承会让人受到限制,
例如,我有一个 StreetSweeper 类和一个 Bicycle 类,现在想要一个它们的 mixin:StreetSweepingBicycle 类。
这时候我们就需要用到 mixin,一个包含其他类的方法的类。
Javascript 不支持多重继承,但是可以通过将方法拷贝到原型中来实现 mixin。
以上内容参考于 https://zh.Javascript.info/private-protected-properties-methods, 在此学习记录!