js高级第一天

JavaScript面向对象

1.1两大编程思想:

1、面向过程

面向过程:POP(Process-oriented programming)

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。

大象放到冰箱:打开冰箱==》放入大象==》关上冰箱

在这里插入图片描述

2、面向对象

面向对象:OOP (Object Oriented Programming)

面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。

大象(体重,走),冰箱(质量,开门,关门):都看成对象功能

面向过程:按照步骤完成面向对象:对象与对象之间合作完成

面向对象和过程区别

​ 面向过程:小项目

​ 面向对象:多人合作大项目

比如:

​ 一个人盖小狗窝,直接和泥,方砖,修饰既可

​ 但是盖高楼的话,需要打地基,需要运输材料,需要财务结算等,此时不需要等,个做个的,效率高【模块完成】

1.2面向对象三大特性

  • 封装性【已经把扫把功能准备好,负责开即可】
  • 继承性【继承与拖拉机,会开拖拉机就会弄这个,继承自拖拉机】
  • 多态性【可以放到一起,也可以单独拿下来,而且那个扫把坏了换哪个不影响其他的】

在这里插入图片描述

面向对象和过程优缺点

面向过程:

​ 优点:性能比面向对象高,步骤联系紧密

​ 缺点:不好维护,不易多次使用及扩展

​ 面向对象:

​ 优点:易维护,可复用,可扩展,灵活性高

​ 缺点性能没有面向过程高

面向过程就是一份蛋炒饭,味道均匀,但是假如有的人不喜欢吃鸡蛋,没办法分开

面向对象就是一个盖浇饭,但是味道不均匀,而不想吃某种味道,可以分开

简单程序面向过程,复杂程序用面向对象

ES6中的类和对象

ECMAScript5,ECMAScriot6;
JS:ECMAScript,DOM,BOMES5:没有类,ES6:类类是在ES6中新加进入的,学会区分类和对象的概念类:泛指一类对象:类中的具体的某个实例,【属性和方法的集合体】

类:抽象

​ 类模拟抽象的,泛指的,对象是具体的

​ 面向对象模拟现实世界,更贴近实际生活,生活照分为抽象事物和具体事物

	比如:手机【两层含义:具体某个手机,和笼统的概念手机】1、抽取,把对象的属性和行为封装成一个类2、对类进行实例化, 获取类的对象
例如:人有身高,体重等,但是具体的某个人也有这个属性练习了解类和对象人==>姚明电影明星==》周星驰

对象:具体

​ 对象:类中的具体的某个实例【属性和方法的集合体】

​ 现实生活中:万物皆对象,对象是一个具体的事物,看得见摸得着的实物。例如,一本书、一辆汽车、一个人可以是“对象”

​ 在JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。

var n = 3;
var arr = [1,2,3]
var str = 'abcd';
function fn () {}

对象是由属性和方法组成的:

​ 属性:对象有什么【访问】【语法:对象.属性】

​ 方法:对象做什么【执行】【语法:对象.方法()】

​ 属性:事物的特征,在对象中用属性来表示(常用名词)

​ 方法:事物的行为,在对象中用方法来表示(常用动词)

arr.length
arr.reverse();
对象的属性:对象.属性
对象的方法:对象.方法();

面向对象的思维特点:

​ 1.抽取(抽象)对象共用的属性和方法组织(封装)成一个类(模板)

​ 2.对类进行实例化, 获取类的对象

类class

在ES6中新增加了类的概念,可以使用class关键字声明一个类,之后以这个类来实例化对象。【构造函数实例化对象】

  • 类抽象了对象的公共部分,它泛指某一大类(class)

创建类

语法:class 类名 {属性和方法}【构造函数语法糖】class Person {}注意类名首字母大写类要抽取公共属性方法,定义一个类
class Star {
};var ldh = new Star();类就是构造函数的语法糖

类constructor构造函数

语法:

class Star {constructor (uname,age){this.uname = uname;this.age = age;}
}属性:放到constructor,构造函数里面
注意:类里面的方法不带function,直接写既可类里面要有属性方法,属性方法要是想放到类里面,我们用constructor构造器构造函数作用:接收参数,返回实例对象,new的时候主动执行,主要放一些公共的属性

constructor() 方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过new命令生成对象实例时,自动调用该方法。

注意:每个类里面一定有构造函数,如果没有显示定义, 类内部会自动给我们创建一个constructor() ,

注意:this代表当前实力化对象,谁new就代表谁


类添加方法

语法:注意方法和方法之间不能加逗号


class Star {constructor () {}sing () {}tiao () {}}
class 类名 { constructor(){}   方法名(){} }注意:类中定义属性,调用方法都得用thisthis.属性this.方法()

注意:方法之间不能加逗号分隔,同时方法不需要添加function 关键字

总结:类有对象的公共属性和方法,用class创建,class里面包含constructor和方法,我们把公共属性放到constructor里面,把公共方法直接往后写既可,但是注意不要加逗号

上午回顾:

​ 编程思想:面向过程,面向对象(封装,继承,多态)

​ ES6:类(泛指),对象(具体)

​ 创建类:class 类名 {contructor () {属性} 方法() {} 方法() {}}

​ 实例化:new 类名();

类的继承

extends

语法:class Father {}class Son extends Father{}注意:是子类继承父类

super关键字

我们应用的过程中会遇到父类子类都有的属性,此时,没必要再写一次,可以直接调用父类的方法就可以了

super关键字用于访问和调用对象父类上的函数。可以调用父类的构造函数,也可以调用父类的普通函数

当子类没有constructor的时候可以随意用父类的,但是如果子类也含有的话,constructor会返回实例,this的指向不同,不可以再直接使用父类的东西super:调用父类的方法(普通方法,构造方法)

调用父类构造函数

class F { constructor(name, age){} }class S extends F { constructor (name, age) { super(name,age); } }注意: 子类在构造函数中使用super, 必须放到this 前面(必须先调用父类的构造方法,在使用子类构造方法

调用父类普通函数

class F { constructor(name, age){} say () {} }class S extends F { constructor (name, age) { super(name,age); } say () { super.say() } }注意:如果子类也有相同的方法,优先指向子类,就近原则

总结:super调用父类的属性和方法,那么查找方法的原则就近原则

属性和方法:

​ 属性:如果子类既想有自己的属性,又想继承父类的属性,那么我们用super【super(参数,参数)】

​ 方法:如果子类和父类有相同的方法,加入子类依旧想用父类的方法,那么我们用super调用【super.方法()】

三个注意点

  • 在ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象.
  • 类里面的共有属性和方法一定要加this使用.【this,对象调用属性和方法】按钮练习
  • 类里面的this指向问题.
  • constructor 里面的this指向实例对象, 方法里面的this 指向这个方法的调用者
class Button {constructor () {var btn = document.querySelector('input');btn.onclick = this.cli;}cli () {console.log('点击了');}}var anniu = new Button();

类里面的this指向

  • 构造函数的this指向实例对象

  • 普通函数的this是调用者,谁调用this是谁

	<input type="button" value="点击">var that;class F {constructor (name, age) {this.name = name;this.age = age;// console.log(this);that = this;this.btn = document.querySelector('input');this.btn.onclick = this.cli;}cli () {console.log(this);}say () {console.log(this);}}var obj = new F('刘德华',22);

课程回顾:

​ 编程思想:面向过程,面向对象(封装,继承,多态)

​ ES6:类(泛指),对象(具体)

创建类:class 类名 {构造器(){} 普通方法() {}}

实例化:new 类

继承:class Son extends Father {super}

​ 三个注意点:

​ 1、先定义类,再实例化

​ 2、在类里面用属性和方法,this.XXX;

​ 3、构造函数this指向实例对象,普通函数this指向调用者

tab栏案例

this执行==》构造函数,new的对象,方法:this,调用者

面向对象版tab 栏切换

1.tab栏切换的主要思路是:2.点击当前li 添加liactive 类其余li移除类3.根据当前li 的索引号当前section 添加类,其余section 删除类4.这里可以把添加放入切换函数里面5.新增一个清除类函数,专门移除其余li和section 类6.注意里面this 指向问题

面向对象版tab 栏切换添加功能

1.点击+ 可以实现添加新的选项卡和内容2.第一步: 创建新的选项卡li 和新的内容section3.第二步: 把创建的两个元素追加到对应的父元素中.4.以前的做法:  动态创建元素createElement, 但是元素里面内容较多, 需要innerHTML赋值,在appendChild追加到父元素里面.5.现在高级做法:   利用insertAdjacentHTML() 可以直接把字符串格式元素添加到父元素中6.appendChild不支持追加字符串的子元素, insertAdjacentHTML支持追加字符串的元素7.insertAdjacentHTML(追加的位置,‘要追加的字符串元素’)  8.追加的位置有: beforeend插入元素内部的最后一个子节点之后9.该方法地址:  https://developer.mozilla.org/zh-CN/docs/Web/API/Element/insertAdjacentHTML

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

d3.js 教程 模仿echarts legend功能

上一节记录没有加上echarts的legend功能&#xff0c;这一小节补一下。 1. 数据 我们可以从echarts中看出&#xff0c;折线数据并不是我们传进入的原始数据&#xff08;多数情况下我们也不会修改原始数据&#xff09;&#xff0c;而是原始数组的一个备份而已。备份数组的方法有很…

小程序2-基本架构讲解(一)WXSS样式

项目里边生成了不同类型的文件: .json 后缀的 JSON 配置文件.wxml 后缀的 WXML 模板文件.wxss 后缀的 WXSS 样式文件.js 后缀的 JS 脚本逻辑文件WXSS 样式 WXSS (WeiXin Style Sheets)是一套样式语言&#xff0c;用于描述 WXML 的组件样式。WXSS 具有 CSS 大部分的特性 新增了尺…

js高级—tab栏切换(面向对象做法)

<main><h4>Js 面向对象 动态添加标签页</h4><div class"tabsbox" id"tab"><!-- tab 标签 --><nav class"fisrstnav"><ul><li class"liactive"><span>测试1</span><sp…

Win10卸载python总是提示error2503失败各种解决办法

最近win10的电脑装了python的3.4&#xff0c;然后想卸载&#xff0c;就总是提示error 2053&#xff0c;类似于这种&#xff1a; 下面是我的坎坷解决之路&#xff1a; 1、网上说&#xff0c;任务管理器 --> 详细信息 --> explorer.exe结束任务&#xff0c;结束资源管理器&…

js高级—查询商品案例

<div class"search">按照价格查询&#xff1a;<input type"text" class"start"> - <input type"text" class"end"><button class"search-price">搜索</button> 按照商品名称查询&a…

js高级第二天

构造函数和原型 构造函数和原型 在典型的OOP 的语言中&#xff08;如Java&#xff09;&#xff0c;都存在类的概念&#xff0c;类就是对象的模板&#xff0c;对象就是类的实例&#xff0c;但在ES6之前&#xff0c;JS 中并没用引入类的概念。ES6&#xff0c;全称ECMAScript6.0…

操作系统原理之文件系统(第五章)

一、文件 1、⽂件系统的⽤户接⼝包括⽂件的命名、类型、属性和对⽂件的操作 2、⽂件命名&#xff1a;所有操作系统都允许⽤1&#xff5e;8个字⺟组成的字符串 3、⽂件扩展名&#xff1a;多数操作系统都⽀持⽂件名⽤圆点隔开分为两部分&#xff0c;圆点后⾯的部分称为⽂件扩展名…

js高级第三天

原型链 作用&#xff1a;提供一个成员的查找机制&#xff0c;或者查找规则含义&#xff1a;由原型所串联起来的链装结构JavaScript 的成员查找机制(规则) 当访问一个对象的属性&#xff08;包括方法&#xff09;时&#xff0c;首先查找这个对象自身有没有该属性。如果没有就查…

为什么大学的计算机老师技术那么厉害,却不愿意当程序员?

不知道大家有多少是从事跟计算机有关的工作的&#xff0c;每次想到大学时的计算机考试&#xff0c;都能令小小编心惊胆战呀&#xff0c;各式代码和计算机语言&#xff0c;真的是很令人头痛了。不过呢&#xff0c;也有很多大神&#xff0c;大学学着其他的专业&#xff0c;却在毕…

DDG全家桶之3022

本篇文章主要根据360Netlab新出的DDG分析文档来复现新变种3022&#xff0c;会涉及部分分析和清除的方法&#xff0c;本篇文章只用于学习交流&#xff0c;为广大受害者提供清除思路 &#xff0c;请勿用于非法用途&#xff0c;产生一切后果与作者无关 详情请参考文档&#xff1a;…

js高级第四天

课程回顾&#xff1a; ​ 原型链&#xff1a;由原型构成链状结构&#xff0c;提供成员查找机制 ​ 继承&#xff1a;组合继承&#xff1a;构造函数和原型对象 ​ 属性&#xff1a;调用父构造函数的时候用call改变this指向 ​ 方法&#xff1a;父实例对象赋值给子原型对象&a…

d3.js 制作简单的俄罗斯方块

d3.js是一个不错的可视化框架&#xff0c;同时对于操作dom也是十分方便的。今天我们使用d3.js配合es6的类来制作一个童年小游戏--俄罗斯方块。话不多说先上图片。 1. js tetris类 由于方法拆分的比较细所以加上了一些备注&#xff08;这不是我的风格&#xff01;&#xff09; c…

Flask中路由系统以及蓝图的使用

一、Flask的路由系统 1.app.route()装饰器中的参数 methods:当前URL地址&#xff0c;允许访问的请求方式 app.route("/info", methods["GET", "POST"]) def student_info():stu_id int(request.args["id"])return f"Hello Old b…

js高级第五天

课程回顾&#xff1a; ​ 原型链&#xff1a;由原型构成链状结构&#xff0c;提供成员查找机制 ​ 继承&#xff1a;组合继承&#xff1a;构造函数和原型对象 ​ 属性&#xff1a;调用父构造函数的时候用call改变this指向 ​ 方法&#xff1a;父实例对象赋值给子原型对象&a…

d3.js 制作简单的贪吃蛇

d3.js是一个不错的可视化框架&#xff0c;同时对于操作dom也是十分方便的。今天我们使用d3.js配合es6的类来制作一个童年小游戏–贪吃蛇。话不多说先上图片。 1. js snaker类 class Snaker {constructor() {this._size 30;this._len 3;this._width 900;this._height 690;th…

js高级第六天

Q课程回顾&#xff1a; ​ 闭包&#xff1a;有权访问另外一个函数的局部变量的函数&#xff0c;作用&#xff1a;延伸变量使用范围 ​ mdn&#xff0c;w3c function fn1 () {var n 3;return function () {console.log(n);} }​ 递归&#xff1a;函数调用其本身 function f…

Chrome 75 lazy-loading

Chrome 75 & lazy-loading https://addyosmani.com/blog/lazy-loading/ https://chromestatus.com/feature/5645767347798016 Chrome 75 将默认启用延迟加载功能 自 Chrome 75 起&#xff0c;将原生支持图片的延迟加载&#xff0c;在代码中编写 <img loading"lazy&…

d3.js 实现烟花鲜果

今天在d3.js官网上看到了一个烟花的DEMO&#xff0c;是canvas制作的&#xff0c;于是我想用d3.js来实现它&#xff0c;js代码只有几行。好了废话不多说&#xff0c;先上图。 1 js 类 因为烟花要有下落的效果&#xff0c;所以里面用到了一些简单的数学和物理知识来模拟重力&…

阿里Sentinel控制台源码修改-对接Apollo规则持久化

改造背景 前面我们讲解了如何对接Apollo来持久化限流的规则&#xff0c;对接后可以直接通过Apollo的后台进行规则的修改&#xff0c;推送到各个客户端实时生效。 但还有一个问题就是Sentinel控制台没有对接Apollo&#xff0c;Sentinel控制台本来就可以修改限流的规则&#xff0…

Python学习(一)

一、版本&#xff1a; Python2.X /Python3.x 官方宣布2020 年 1 月 1 日&#xff0c; 停止 Python 2 的更新。 Python3.x不兼容Python2.x  二、安装&#xff08;以mac 为例&#xff09; MAC 系统一般都自带有 Python2.x版本 的环境&#xff0c;你也可以在链接 https://www.py…