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


推荐阅读
  • 本文详细探讨了Java中HashMap类的hash()方法的工作原理及其重要性,特别是在JDK 7版本中的实现。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 本文详细介绍了 Node.js 中 OS 模块的 arch 方法,包括其功能、语法、参数以及返回值,并提供了具体的使用示例。 ... [详细]
  • 本文探讨了Web应用(Web App)与原生应用(Native App)之间的主要差异,包括它们在开发、功能实现及版本管理等方面的不同特点,并分析了各自的优势与适用场景。 ... [详细]
  • 本文是对《敏捷软件开发:原则、模式与实践》一书的深度解析,书中不仅探讨了敏捷方法的核心理念及其应用,还详细介绍了面向对象设计的原则、设计模式的应用技巧及UML的有效使用。 ... [详细]
  • Uniswap 与 MoonPay 合作,引入法币交易功能。本文探讨这一合作对用户进入加密货币领域的安全性及便利性的影响。 ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
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社区 版权所有