本篇为 JavaScript 进阶 ES6 系列笔记第一篇,将陆续更新后续内容。参考:JavaScript 进阶面向对象 ES6

文章目录

  • 「一」面向对象编程介绍
  • 「二」ES6 中的类与对象
  • 「三」类的继承
  • 「四」面向对象案例

「一」面向对象编程介绍


  • 面向过程编程 POP

分析出解决问题的步骤,按步骤逐步实现

  • 面向对象编程 OOP

将事务分解成对象,由对象间进行分工与合作

面向对象具有特性:

  1. 封装性
  2. 继承性
  3. 多态性

「二」ES6 中的类与对象


  • 创建类
class Name {// class body
}

类名习惯性定义为首字母大写

  • 实例化
var x = new Name();
  • 类构造函数 constructor

constructor() 方法是类的构造函数(默认)。用于传递参数,返回实例对象。通过 new 命令生成对象实例时,自动调用该方法。如果没有显式定义,类内部会自动创建 constructor()

  • 类添加方法
class Name {方法名() {// function body}
}

「三」类的继承


  • 基本语法
class Father {      // 父类
}
class Son extends Father { // 子类
}

  • super 关键字

super 用于访问和调用对象父类构造函数、普通函数

  1. 调用父类构造函数
  2. 调用父类普通函数

    子类调用时采取 就近原则,先执行子类函数,若子类中无此函数,再执行父类中函数

注意:

子类在构造函数中使用 super ,必须放到 this 前面。必须先调用父类的构造方法,在调用子类的构造方法。

  • 三个注意点
  1. 在 ES6 中类没有变量提升,所以必须先定义类,才能通过类实例化对象
  2. 类里面的共有属性和方法一定要加 this 使用
  3. 类里面 this 指向问题
  4. constructor 里面的 this 指向实例对象,方法里面的 this 指向这个方法的调用者

「四」面向对象案例


  • 面向对象的 Tab 栏切换

因为实现代码过长,这里先分析一下大体框架,具体实现代码后文给出

  1. 主要 HTML代码
    <main><h4>动态添加标签页</h4><div class="tabsbox" id="tab"><!-- tab 标签 --><nav class="firstnav"><ul><li class="liactive"><span>测试1</span><span class="iconfont icon-guanbi"></span></li><li><span>测试2</span><span class="iconfont icon-guanbi"></span></li><li><span>测试3</span><span class="iconfont icon-guanbi"></span></li></ul><div class="tabadd"><span>+</span></div></nav><!-- tab 内容 --><div class="tabscon"><section class="conactive">测试1</section><section>测试2</section><section>测试3</section></div></div></main><script src="tab.js"></script>
  1. 由于篇幅问题,css 代码不再给出

  2. JS 代码

var that;
class Tab {constructor(id) {that = this;this.main = document.querySelector(id);this.add = this.main.querySelector('.tabadd');// li 的父元素this.ul = this.main.querySelector('.firstnav ul:first-child'); // .firstnav 下第一个 ul// section 的父元素this.fsection = this.main.querySelector('.tabscon');this.init();}// 初始化操作init() {this.updateNode();this.add.onclick = this.addTab;     // no ()for (var i = 0; i < this.lis.length; i++) {this.lis[i].index = i;this.lis[i].onclick = this.toggleTab;   // no ()// 点击删除按钮,调用删除函数this.remove[i].onclick = this.removeTab;// 双击 span ,调用编辑函数this.spans[i].ondblclick = this.editTab;this.sections[i].ondblclick = this.editTab;}}// 1. 切换功能toggleTab() {that.clearClass();// 去除底侧边框this.className = 'liactive';that.sections[this.index].className = 'conactive';}// 2. 添加功能addTab() {that.clearClass();var random = Math.random();var li = '<li class="liactive"><span>新选项卡</span><span class="iconfont icon-guanbi"></span></li>';var section = '<section class="conactive">测试' + random + '</section>';that.ul.insertAdjacentHTML('beforeend', li);that.fsection.insertAdjacentHTML('beforeend', section);that.init();}// 3. 删除功能removeTab(e) {// 防止触发父类 li 点击事件,应该阻止冒泡e.stopPropagation();// 获取索引号var index = this.parentNode.index;// 利用索引直接删除元素, 直接利用 remove()that.lis[index].remove();that.sections[index].remove();that.init();// 删除非选定状态if (document.querySelector('.liactive')) return;// 删除选定状态,手动调用点击事件,使得前一个被选中index == 0 ? index : index--;that.lis[index] && that.lis[index].click();     // 妙啊}// 4. 修改功能editTab() {var str = this.innerHTML;// 双击禁止选定文字window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();this.innerHTML = '<input type="text" />';var input = this.children[0];input.value = str;// 使得文本框中文字处于选定状态input.select();// 失去焦点,文本赋值给 spaninput.onblur = function () {this.parentNode.innerHTML = this.value;}// 点击回车,也可赋值input.onkeyup = function (e) {if (e.keyCode === 13) {     // 13 回车键this.blur();}}}// 清除样式clearClass() {for (var i = 0; i < this.lis.length; i++) {this.lis[i].className = '';this.sections[i].className = '';}}// 动态更新所有 li 和 sectionupdateNode() {this.lis = this.main.querySelectorAll('li');this.sections = this.main.querySelectorAll('section');// 删除 ✖this.remove = this.main.querySelectorAll('.icon-guanbi');// 获取 spanthis.spans = this.main.querySelectorAll('.firstnav li span:first-child');}
}new Tab('#tab');

补充 1

  • insertAdjacentHTML() 可以直接把字符串格式元素添加到父元素中
  • 语法:element.insertAdjacentHTML(position, text);

  • 注意: appendChild 不支持追加字符串的子元素,insertAdjacentHTML() 支持

补充 2

  • 双击事件:ondblclick
  • 双击会默认选定文字,若要禁止选中文字,需要代码
    window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();

JavaScript 面向对象编程(一) —— 面向对象基础相关推荐

  1. php控制器面向对象编程,PHP 面向对象编程(2)

    一些内建方法: class Person { public $isAlive = true; function __construct($name) { //这里我们创建了一个name的属性 $thi ...

  2. python面向对象的优点_Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  3. python面向对象编程的优点-Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  4. 【Java开发语言 03】第三章 面向对象编程(面向对象与面向过程+类和对象+类成员一:属性+类成员二:方法+对象的创建和使用+封装和隐藏+构造器+关键字this,package,import)

    面向对象编程 1 面向对象与面向过程 1.1 java类及类的成员 2 java语言的基本元素:类和对象 2.1 类的语法格式 2.2 创建Java自定义类 2.3 对象的创建及使用 3 类的成员之一 ...

  5. 什么是面向对象编程和面向对象编程语言

    面向对象编程是一种编程范式或编程风格.它以类或对象作为组织代码的基本单元,并将封装.抽象.继承.多态四个特性,作为代码设计和实现的基石 . 面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制 ...

  6. python入门:正则表达式,面向对象编程,零基础视频教程分享

    正则表达式 import re #首先必须import re模块,re=Regular Expression,就是正则表达式的意思. pattern=re.compile(r'hello') #指明你 ...

  7. python中面向对象编程简称为_Python基础-面向对象编程

    本文完全转载自廖雪峰大神的教程: 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  8. python 面向对象编程简称_Python基础-面向对象编程

    简介 三中编程范式 面向过程编程 函数式编程 面向对象编程 面向对象和面向过程对比 面向过程 优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Lin ...

  9. 怎么理解面向对象编程【java基础第一讲】

    面向对象编程(OOP)是什么 OOP:Object Oriented Programming.要讲面向对象我们先来理解一下面向过程的含义,如果你已经有c语言相关的开发经验可能就已经明白面向过程的意义. ...

  10. MATLAB 面向对象编程 APP Designer基础

    类的基本组成 定义一个类 < 表示可继承 创建实例化对象 添加属性(公有或私有属性) 构造方法,初始化 设置函数和获取函数 继承 多态(同一个函数传递不同的对象) 基本模板,点击MATLAB中新 ...

最新文章

  1. java des zero_android----Java DES加密算法工具类
  2. java String format占位符
  3. mysql报错ERROR 1206 (HY000): The total number of locks exceeds the lock table size的解决方法...
  4. 手机 服务器 推送消息推送消息,推送信息到手机的pushover使用方法及sample code
  5. 小菜编程成长记(十一 无熟人难办事?——聊设计模式迪米特法则)
  6. excel概率密度函数公式_标准正态分布密度函数公式
  7. java设置图片_JAVA 设置背景图片
  8. 纪念第一次面试安服-靶机测试过程以及思路
  9. 伤害世界怎么自建服务器,《伤害世界Hurtworld》服务器架设方法图文详解 怎么开服?...
  10. 常用显卡驱动下载合集
  11. java计算机毕业设计网上宠物商店系统源码+系统+数据库+lw文档+mybatis+运行部署
  12. 推荐几个亲测好用高质量学习SQL的网站(建议收藏)
  13. 使用react+redux+react-redux+react-router+axios+scss技术栈从0到1开发一个applist应用
  14. 漏洞解决方案-SQL注入攻击
  15. 2018年计算机学校迎新标语,2018年大学迎新标语
  16. 期刊论文如何降低重复率?
  17. QUnit 单元测试简介
  18. 百度分享不支持https的最简单解决方案
  19. 2023年美国大学生数学建模时间、分析及算法代码
  20. 《Single Image Depth Prediction with Wavelet Decomposition》论文笔记

热门文章

  1. mac睡眠快捷键_mac键盘快捷键大全哪里有?
  2. springboot 事务统一配置_Spring Boot实现分布式微服务开发实战系列(五)
  3. python多线程没有java_Java 多线程启动为什么调用 start() 方法而不是 run() 方法?...
  4. 第一篇:对Adaboost和GBDT的学习
  5. 谷歌浏览器不能安装离线插件——可行方法
  6. Application Request Route实现IIS Server Farms集群负载详解
  7. UICollectionViewDelegateFlowLayout 使用
  8. UVa 1642 (综合) Magical GCD
  9. oracle 锁问题的解决
  10. [易学C#]C#3.0语言新特性之扩展方法