当前位置: 首页 > news >正文

四川省建设厅官方网站联系电话怎样创建网站流程

四川省建设厅官方网站联系电话,怎样创建网站流程,做的网站有广告图片,值得信赖的深圳app开发公司JavaScript 高级1 #xff1a;面向对象 Date: January 16, 2023 Text: 面向对象、ES6中类和对象、类的继承、面向对象案例 目标#xff1a; 能够说出什么是面向对象 能够说出类和对象的关系 能够使用 class 创建自定义类型 能够说出什么是继承 面向对象编程介绍 面向过…JavaScript 高级1 面向对象 Date: January 16, 2023 Text: 面向对象、ES6中类和对象、类的继承、面向对象案例 目标 能够说出什么是面向对象 能够说出类和对象的关系 能够使用 class 创建自定义类型 能够说出什么是继承 面向对象编程介绍 面向过程编程 POP(Process-oriented programming) 面向过程就是分析出解决问题所需要的步骤然后用函数把这些步骤一步一步实现使用的时候再一个一个的依次调用就可以了。 举个栗子将大象装进冰箱面向过程做法。 面向过程就是按照我们分析好了的步骤按照步骤解决问题。 面向对象编程 OOP (Object Oriented Programming) 面向对象是把事务分解成为一个个对象然后由对象之间分工与合作。 举个栗子将大象装进冰箱面向对象做法。 先找出对象并写出这些对象的功能 大象对象 进去 冰箱对象 打开 关闭 使用大象和冰箱的功能 面向对象是以对象功能来划分问题而不是步骤。 在面向对象程序开发思想中每一个对象都是功能中心具有明确分工。 面向对象编程具有灵活、代码可复用、容易维护和开发的优点更适合多人合作的大型软件项目。 面向对象的特性封装性、继承性、多态性 面向过程和面向对象的对比 面向过程 优点性能比面向对象高适合跟硬件联系很紧密的东西例如单片机就采用的面向过程编程。 缺点没有面向对象易维护、易复用、易扩展 面向对象 优点易维护、易复用、易扩展由于面向对象有封装、继承、多态性的特性可以设计出低耦合的系统使系统 更加灵活、更加易于维护 缺点性能比面向过程低 用面向过程的方法写出来的程序是一份蛋炒饭而用面向对象写出来的程序是一份盖浇饭。 ES6 中的类和对象 面向对象 面向对象更贴近我们的实际生活, 可以使用面向对象描述现实世界事物. 但是事物分为具体的事物和抽象的事物 面向对象的思维特点: 抽取抽象对象共用的属性和行为组织(封装)成一个类(模板)对类进行实例化, 获取类的对象 面向对象编程我们考虑的是有哪些对象按照面向对象的思维特点,不断的创建对象,使用对象,指挥对象做事情. 对象 现实生活中万物皆对象对象是一个具体的事物看得见摸得着的实物。例如一本书、一辆汽车、一个人可以是“对象”一个数据库、一张网页、一个与远程服务器的连接也可以是“对象”。 在 JavaScript 中对象是一组无序的相关属性和方法的集合所有的事物都是对象例如字符串、数值、数组、函数等。 对象是由属性和方法组成的 属性事物的特征在对象中用属性来表示常用名词 方法事物的行为在对象中用方法来表示常用动词 类 class 在 ES6 中新增加了类的概念可以使用 class 关键字声明一个类之后以这个类来实例化对象。 类抽象了对象的公共部分它泛指某一大类class 对象特指某一个通过类实例化一个具体的对象 类抽象了对象的公共部分它泛指某一大类class 对象特指某一个通过类实例化一个具体的对象 面向对象的思维特点: 抽取抽象对象共用的属性和行为组织(封装)成一个类(模板)对类进行实例化, 获取类的对象 创建类 语法 class name { // class body} }创建实例 var xx new name();注意 类必须使用 new 实例化对象 类 constructor 构造函数 constructor() 方法是类的构造函数(默认方法)用于传递参数,返回实例对象通过 new 命令生成对象实例时自动调用该方法。如果没有显示定义, 类内部会自动给我们创建一个constructor() 语法 class Person { constructor(name,age) { // constructor 构造方法或者构造函数 this.name name; this.age age; } }创建实例 var ldh new Person(刘德华, 18); console.log(ldh.name)类添加方法 语法 class Person { constructor(name,age) { // constructor 构造器或者构造函数 this.name name; this.age age; } say() { console.log(this.name 你好); } }创建实例 var ldh new Person(刘德华, 18); ldh.say()注意 方法之间不能加逗号分隔同时方法不需要添加 function 关键字。 案例 Code: !DOCTYPE html html langenheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0meta http-equivX-UA-Compatible contentieedgetitleDocument/title /headbodyscript// 1. 创建类 class 创建一个 明星类class Star {// 类的共有属性放到 constructor 里面constructor(uname, age) {this.uname uname;this.age age;}sing(song) {// console.log(我唱歌);console.log(this.uname song);}}// 2. 利用类创建对象 newvar ldh new Star(刘德华, 18);var zxy new Star(张学友, 20);console.log(ldh);console.log(zxy);// (1) 我们类里面所有的函数不需要写function //(2) 多个函数方法之间不需要添加逗号分隔ldh.sing(冰雨);zxy.sing(李香兰);/script /body/html类的继承 继承 现实中的继承子承父业比如我们都继承了父亲的姓。 程序中的继承子类可以继承父类的一些属性和方法。 语法 class Father{ // 父类 } class Son extends Father { // 子类继承父类 }实例 class Father { constructor(surname) { this.surname surname; } say() { console.log(你的姓是 this.surname); } } class Son extends Father{ // 这样子类就继承了父类的属性和方法} var damao new Son(刘); damao.say();super 关键字 super 关键字用于访问和调用对象父类上的函数。可以调用父类的构造函数也可以调用父类的普通函数 语法 class Person { // 父类 constructor(surname){ this.surname surname; } } class Student extends Person { // 子类继承父类 constructor(surname,firstname){ super(surname); // 调用父类的constructor(surname) this.firstname firstname; // 定义子类独有的属性 } }注意: 子类在构造函数中使用super, 必须放到 this 前面 (必须先调用父类的构造方法,在使用子类构造方法) 案例1 super关键字 用于访问和调用对象父类上的函数。可以调用父类的构造函数也可以调用父类的普通函数。 class Father { constructor(surname) { this.surname surname; } saySurname() { console.log(我的姓是 this.surname); } } class Son extends Father { // 这样子类就继承了父类的属性和方法 constructor(surname, fristname) { super(surname); // 调用父类的constructor(surname) this.fristname fristname; } sayFristname() { console.log(我的名字是 this.fristname); } } var damao new Son(刘, 德华); damao.saySurname(); //我的姓是刘 damao.sayFristname(); //我的名字是德华案例2就近原则 继承中的属性或者方法查找原则: 就近原则 继承中,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行子类的继承中,如果子类里面没有,就去查找父类有没有这个方法,如果有,就执行父类的这个方法(就近原则) !DOCTYPE html html langenheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0meta http-equivX-UA-Compatible contentieedgetitleDocument/title /headbodyscript// super 关键字调用父类普通函数class Father {say() {return 我是爸爸;}}class Son extends Father {say() {// console.log(我是儿子);console.log(super.say() 的儿子);// super.say() 就是调用父类中的普通函数 say()}}var son new Son();son.say();// 继承中的属性或者方法查找原则: 就近原则// 1. 继承中,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行子类的// 2. 继承中,如果子类里面没有,就去查找父类有没有这个方法,如果有,就执行父类的这个方法(就近原则)/script /body/html案例3 子类在构造函数中使用super, 必须放到 this 前面 (必须先调用父类的构造方法,在使用子类构造方法) !DOCTYPE html html langenheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0meta http-equivX-UA-Compatible contentieedgetitleDocument/title /headbodyscript// 父类有加法方法class Father {constructor(x, y) {this.x x;this.y y;}sum() {console.log(this.x this.y);}}// 子类继承父类加法方法 同时 扩展减法方法class Son extends Father {constructor(x, y) {// 利用super 调用父类的构造函数// super 必须在子类this之前调用super(x, y);this.x x;this.y y;}subtract() {console.log(this.x - this.y);}}var son new Son(5, 3);son.subtract();son.sum();/script /body/html三个注意点: 在 ES6 中类没有变量提升所以必须先定义类才能通过类实例化对象.类里面的共有属性和方法一定要加this使用.类里面的this指向问题.constructor 里面的this指向实例对象, 方法里面的this 指向这个方法的调用者比如下面的 综合案例 !DOCTYPE html html langenheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0meta http-equivX-UA-Compatible contentieedgetitleDocument/title /headbodybutton点击/buttonscriptvar that;var _that;class Star {constructor(uname, age) {// constructor 里面的this 指向的是 创建的实例对象that this;console.log(this);this.uname uname;this.age age;// this.sing();this.btn document.querySelector(button);this.btn.onclick this.sing;}sing() {// 这个sing方法里面的this 指向的是 btn 这个按钮,因为这个按钮调用了这个函数console.log(this);console.log(that.uname); // that里面存储的是constructor里面的this}dance() {// 这个dance里面的this 指向的是实例对象 ldh 因为ldh 调用了这个函数_that this;console.log(this);}}var ldh new Star(刘德华);console.log(that ldh);ldh.dance();console.log(_that ldh);// 1. 在 ES6 中类没有变量提升所以必须先定义类才能通过类实例化对象// 2. 类里面的共有的属性和方法一定要加this使用./script /body/html理解 构造函数的this指向的是实例对象成员函数的this指向的是这个函数的调用者根据上例成员函数的指向可以是btn也可以是ldh 比如this.btn.onclick this.sing; 前面是ldh调用btn后面是btn调用sing函数 由此sing函数里的console.log(this);输出的是button点击/button 如果我们想要在sing()中使用constructor中的this我们可以在全局中设定一个变量that, 从而在sing()函数中使用这个变量thatjike 注意this.btn.onclick this.sing; 这里后面的sing不要加括号因为我们需要点击按钮后再运行 而非直接调用函数 面向对象案例 面向对象版 tab 栏切换 功能需求: 点击 tab栏,可以切换效果.点击 号, 可以添加 tab 项和内容项.点击 x 号, 可以删除当前的tab项和内容项.双击tab项文字或者内容项文字,可以修改里面的文字内容. 抽象对象: Tab 对象 该对象具有切换功能该对象具有添加功能该对象具有删除功能该对象具有修改功能 添加功能 点击 可以实现添加新的选项卡和内容第一步: 创建新的选项卡li 和 新的 内容 section第二步: 把创建的两个元素追加到对应的父元素中.以前的做法: 动态创建元素 createElement , 但是元素里面内容较多, 需要innerHTML赋值,在appendChild 追加到父元素里面.现在高级做法: 利用 insertAdjacentHTML() 可以直接把字符串格式元素添加到父元素中appendChild 不支持追加字符串的子元素, insertAdjacentHTML 支持追加字符串的元素insertAdjacentHTML(追加的位置,‘要追加的字符串元素’)追加的位置有: beforeend 插入元素内部的最后一个子节点之后该方法地址: https://developer.mozilla.org/zh-CN/docs/Web/API/Element/insertAdjacentHTML 删除功能 点击 × 可以删除当前的li选项卡和当前的sectionX是没有索引号的, 但是它的父亲li 有索引号, 这个索引号正是我们想要的索引号所以核心思路是: 点击 x 号可以删除这个索引号对应的 li 和 section但是,当我们动态删除新的li和索引号时,也需要重新获取 x 这个元素. 需要调用init 方法 编辑功能 双击选项卡li或者 section里面的文字,可以实现修改功能双击事件是: ondblclick如果双击文字,会默认选定文字,此时需要双击禁止选中文字window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();核心思路: 双击文字的时候, 在 里面生成一个文本框, 当失去焦点或者按下回车然后把文本框输入的值给原先元素即可. Code:HTML index !DOCTYPE html html langenheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0meta http-equivX-UA-Compatible contentieedgetitle面向对象 Tab/titlelink relstylesheet href./styles/tab.csslink relstylesheet href./styles/style.css /headbodymainh4Js 面向对象 动态添加标签页/h4div classtabsbox idtab!-- tab 标签 --nav classfisrstnavulli classliactivespan测试1/spanspan classiconfont icon-guanbi/span/lilispan测试2/spanspan classiconfont icon-guanbi/span/lilispan测试3/spanspan classiconfont icon-guanbi/span/li/uldiv classtabaddspan/span/div/nav!-- tab 内容 --div classtabsconsection classconactive测试1/sectionsection测试2/sectionsection测试3/section/div/div/mainscript srcjs/tab.js/script /body/htmlCode:JS tab 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(.fisrstnav ul:first-child);// section 父元素this.fsection this.main.querySelector(.tabscon);this.init();}init() {this.updateNode();// init 初始化操作让相关的元素绑定事件this.add.onclick this.addTab;for (var i 0; i this.lis.length; i) {this.lis[i].index i;this.lis[i].onclick this.toggleTab;this.remove[i].onclick this.removeTab;this.spans[i].ondblclick this.editTab;this.sections[i].ondblclick this.editTab;}}// 因为我们动态添加元素 需要从新获取对应的元素updateNode() {this.lis this.main.querySelectorAll(li);this.sections this.main.querySelectorAll(section);this.remove this.main.querySelectorAll(.icon-guanbi);this.spans this.main.querySelectorAll(.fisrstnav li span:first-child);}// 1. 切换功能toggleTab() {// console.log(this.index);that.clearClass();this.className liactive;that.sections[this.index].className conactive;}// 清除所有li 和section 的类clearClass() {for (var i 0; i this.lis.length; i) {this.lis[i].className ;this.sections[i].className ;}}// 2. 添加功能addTab() {that.clearClass();// (1) 创建li元素和section元素 var random Math.random();var li li classliactivespan新选项卡/spanspan classiconfont icon-guanbi/span/li;var section section classconactive测试 random /section;// (2) 把这两个元素追加到对应的父元素里面that.ul.insertAdjacentHTML(beforeend, li);that.fsection.insertAdjacentHTML(beforeend, section);that.init();}// 3. 删除功能removeTab(e) {e.stopPropagation(); // 阻止冒泡 防止触发li 的切换点击事件var index this.parentNode.index;console.log(index);// 根据索引号删除对应的li 和section remove()方法可以直接删除指定的元素that.lis[index].remove();that.sections[index].remove();that.init();// 当我们删除的不是选中状态的li 的时候,原来的选中状态li保持不变if (document.querySelector(.liactive)) return;// 当我们删除了选中状态的这个li 的时候, 让它的前一个li 处于选定状态index--;// 手动调用我们的点击事件 不需要鼠标触发that.lis[index] that.lis[index].click();}// 4. 修改功能editTab() {var str this.innerHTML;// 双击禁止选定文字window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();// alert(11);this.innerHTML input typetext /;var input this.children[0];input.value str;input.select(); // 文本框里面的文字处于选定状态// 当我们离开文本框就把文本框里面的值给span input.onblur function() {this.parentNode.innerHTML this.value;};// 按下回车也可以把文本框里面的值给spaninput.onkeyup function(e) {if (e.keyCode 13) {// 手动调用表单失去焦点事件 不需要鼠标离开操作this.blur();}}}} new Tab(#tab);Code:CSS style font-face {font-family: iconfont;src: url(./iconfont/iconfont.eot?t1553960438096); /* IE9 */src: url(./iconfont/iconfont.eot?t1553960438096#iefix) format(embedded-opentype), /* IE6-IE8 */url(data:application/x-font-woff2;charsetutf-8;base64,d09GMgABAAAAAAK4AAsAAAAABmwAAAJrAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcAp4fwE2AiQDCAsGAAQgBYRtBzAbpQXIrrApw71oi3CCOyzEy8RvE4yIN8TD036/zp03qCYRjaJZNBFFS/gREoRGipQKofjuNrb9XbTqrmXcqWzfTRDqFqWkhAJzYToaE6LQ7Q30CirRqSKMnj58DdIdrNAdhoTQJa5VGfLrtiAylPoAcZdUC57UljTR4TMAo4oL0xiqwYG8YueIHPCdTqYajty/tbUpmrwvEnUK42lQhLMssVy1UNhzN4kmF6vSQVvMY/T5HEU1SUXBbti7uBBrxcgqJULp0GhAgBna5AgSkgE0eN6R1NwTitNt0yAI5VG7wr/8AljmoX7KzqtBF1Q8k9JTPWp1AjnJDgCzmM3bU0V31dsvV3M2eC6fHjaGfX/qS7U5Gr58vj6uD0bgxudyrV/OtHHyPNZnpO1txbktjdY3FB617nxeOzq8niGYnRwT3v3aZxeXf6rrNxl5//49WlEtZUUL1Pj3Bv1EO7MuG2namrCkbvcnApLUJtWpRhv2tzlRLx43kQ7WO2/FW6c5QqDZEZnYKFeosoVK1NdSa5E/XaVM1Ra7BhAEQmk0kjV5QaLbIzG5U6HRRqTkK1DqJtivrjMT1zJaNnIsihAiyQE3JdbszcW0Xiadzdl4d8UO0HSUGNDNXzl2hifYSO5pPjrorgdjUAAavoa5TKDZVUXD3kuuOOzh70fShvUiN2owtNsRxIREIIiATUCYpGO2aqXy/CxEeHcfuaKrLDiGbQ5kcEMsNIK8M5qCmR3mn8RFHOpcECBtlAAwWIZ2OAqV5kQoJXHvShORYBzrDZKhhb3uT8QPlrA3bmsKZV6i89DiTV2o1AAAA) format(woff2),url(./iconfont/iconfont.woff?t1553960438096) format(woff),url(./iconfont/iconfont.ttf?t1553960438096) format(truetype), /* chrome, firefox, opera, Safari, Android, iOS 4.2 */url(./iconfont/iconfont.svg?t1553960438096#iconfont) format(svg); /* iOS 4.1- */ }.iconfont {font-family: iconfont !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale; }.icon-guanbi:before {content: \e676; }Code:CSS tab * {margin: 0;padding: 0; }ul li {list-style: none; }main {width: 960px;height: 500px;border-radius: 10px;margin: 50px auto; }main h4 {height: 100px;line-height: 100px;text-align: center; }.tabsbox {width: 900px;margin: 0 auto;height: 400px;border: 1px solid lightsalmon;position: relative; }nav ul {overflow: hidden; }nav ul li {float: left;width: 100px;height: 50px;line-height: 50px;text-align: center;border-right: 1px solid #ccc;position: relative; }nav ul li.liactive {border-bottom: 2px solid #fff;z-index: 9; }#tab input {width: 80%;height: 60%; }nav ul li span:last-child {position: absolute;user-select: none;font-size: 12px;top: -18px;right: 0;display: inline-block;height: 20px; }.tabadd {position: absolute;/* width: 100px; */top: 0;right: 0; }.tabadd span {display: block;width: 20px;height: 20px;line-height: 20px;text-align: center;border: 1px solid #ccc;float: right;margin: 10px;user-select: none; }.tabscon {width: 100%;height: 300px;position: absolute;padding: 30px;top: 50px;left: 0px;box-sizing: border-box;border-top: 1px solid #ccc; }.tabscon section, .tabscon section.conactive {display: none;width: 100%;height: 100%; }.tabscon section.conactive {display: block; }
http://www.hkea.cn/news/14261786/

相关文章:

  • 建设部设计院网站温州市城乡建设厅网站
  • 邢台做网站优化c2c的电子商务网站有哪些
  • 延安免费做网站湛江手机网站制作
  • 什么专业学网站建设wordpress xiu主题
  • 重庆h5网站建设模板上海发布公众号下载安装
  • 做 理财网站有哪些问题微信小程序是什么模式
  • 农产品网站建设投标书wordpress子域名储存图片
  • 四川网站设计成功柚米科技建设一个asp网站
  • 河北建设厅网站三类人专门做外贸的网站
  • 大型建筑网站设计公司详情媒体库wordpress
  • php网站开发环境说明wordpress主题包怎么做
  • 常州市教育基本建设与装备管理中心网站响应式网页模版
  • 企业网站空间多大合适医院网站建设最新报价
  • 服装商城网站建设价格信用中国官网企业查询
  • 网站制作怎样做背景wordpress google字体 下载到本地
  • 可以做审计初级题的网站佛山住房和城乡建设部网站官网
  • 网站正在建设中 源码下载wordpress 固定 拼音网址
  • 深圳华维网站建设淘宝代运营公司排名
  • 做it的网站有哪些微信引流被加软件
  • 如何解析后用二级域名做网站牡丹江建设局网站
  • wordpress名站重庆外贸网站建设公司排名
  • 做调查问卷能赚钱的网站网站数据库迁移
  • 做网站挣钱快又多wordpress获取分类列表标题
  • ssr网站怎么做东莞网站制作公司怎么选择
  • 做网站建设有哪些公司好电脑前端主要做什么
  • 河北网站备案流程dw做的网站成品
  • 房山网站制作招聘网站开发策划方案
  • 专业的天津网站建设建设企业银行网站
  • cms网站开发需要学什么京网站制作公司
  • 潍坊 网站天津网站建设方案优化