ECMAScript

深入理解JS中的对象(三):class 的工作原理

荒凉一梦 提交于 2020-08-17 08:34:31
目录 序言 class 是一个特殊的函数 class 的工作原理 class 继承的原型链关系 参考 1.序言 ECMAScript 2015(ES6) 中引入的 JavaScript 类实质上是 JavaScript 现有的基于原型的继承的语法糖。类语法(class)不会为JavaScript引入新的面向对象的继承模型。 2.class 是一个特殊的函数 ES6 的 class 主要提供了更多方便的语法去创建老式的构造器函数。我们可以通过 typeof 得到其类型: class People { constructor(name) { this.name = name; } } console.log(typeof People) // function 那 class 声明的类到底是一个什么样的函数呢?我们可以通过在线工具 ES6 to ES5 来分析 class 背后真正的实现。 3.class 的工作原理 下面通过多组代码对比,来解析 class 声明的类将转化成什么样的函数。 第一组:用 class 声明一个空类 ES6的语法: class People {} 这里提出两个问题: 1.class 声明的类与函数声明不一样,不会提升(即使用必须在声明之后),这是为什么? console.log(People) // ReferenceError class People {

JSON在JavaScript中的应用

别说谁变了你拦得住时间么 提交于 2020-08-16 14:33:42
JSON的应用 1 什么是json格式? 2 json的方法 3 JSON格式的遍历 1 什么是json格式? JSON(JavaScript Object Notation) JavaScript对象表示法是一种轻量级的数据交换格式。它是基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。 2 json的方法 stringify():JSON 转换 为 字符串 parse():字符串 转换为 对象 var person = { name: "刘亦菲", age: 35, sex: '女' } 【JSON 转换 为 字符串】 var x = JSON.stringify(person); console.log(x) 【字符串 转换为 对象】 var y = JSON.parse(x) var y = eval(`(${x})`) console.log(y) 3 JSON格式的遍历 <script type="text/javascript"> var people = { "男明星": [{ "name": "梁朝伟", "age":

vue-quill-editor富文本编辑器 结合element-ui 改造 上传图片功能

吃可爱长大的小学妹 提交于 2020-08-16 11:54:08
本文转载借鉴自 https://blog.csdn.net/wepe12/article/details/89447829 改造原因: 1、vue-quill-editor自带的图片上传,上传后地址转换成了base64编码,太长了; 2、此富文本编辑器获取 保存的内容会是 一串 html代码。图片未保存至服务器; 选择element-ui原因: 1、当然是项目中用了element-ui啊 2、element-ui上传有简洁明了的事件捕获 <el-upload v-show="false" ref="upload" class="upload-demo" action="loadUrl" // 上传地址 :before-upload="beforeUpload" // 上传更新前,可操作加个loading啥的 :on-success="upScuccess" // 成功 :on-error="uploadError" // 失败 /> 正文: 安装 npm i vue-quill-editor --save 引入使用 // 引入 import { quillEditor } from 'vue-quill-editor' import 'quill/dist/quill.core.css' import 'quill/dist/quill.snow.css' import

JavaScript:Object.prototype.toString方法的原理

末鹿安然 提交于 2020-08-16 11:47:29
在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. var arr = []; console.log(Object.prototype.toString.call(arr)) //" [object Array] " 本文要讲的就是,toString方法是如何做到这一点的,原理是什么. ECMAScript 3 在 ES3 中,Object.prototype.toString方法的规范如下: 15.2.4.2 Object.prototype.toString() 在 toString 方法被调用时,会执行下面的操作步骤: 1. 获取this对象的[[Class]]属性的值. 2. 计算出三个字符串 "[object ", 第一步的操作结果Result(1), 以及 "]" 连接后的新字符串. 3. 返回第二步的操作结果Result(2). [[Class]]是一个内部属性,所有的对象(原生对象和宿主对象)都拥有该属性.在规范中,[[Class]]是这么定义的 内部属性 描述 [[Class]] 一个字符串值,表明了该对象的类型. 然后给了一段解释: 所有内置对象的[[Class]]属性的值是由本规范定义的.所有宿主对象的[[Class]]属性的值可以是任意值,甚至可以是内置对象使用过的[

字典

狂风中的少年 提交于 2020-08-15 15:50:09
语雀入口   https://www.yuque.com/along-n3gko/ezt5z9 前言   在字典中,存储的时[键,值]对,其中键名是用来查询元素的,字典也称之为映射。 创建字典   与 Set 类相似, ECMAScript 6 同样包含了一个 Map 类的实现,即我们所说的字典。你会发现它和 Set 类很相似(但不同于存储 [ 值,值 ] 对的形式,我们将要存储的是 [ 键,值 ] 对)。 1 function Dictionary() { 2 var items = {}; 3 } 方法 1 set(key,value):向字典中添加新元素。 2 delete (key):通过使用键值来从字典中移除键值对应的数据值。 3 has(key):如果某个键值存在于这个字典中,则返回true,反之则返回false。 get(key):通过键值查找特定的数值并返回。 4 clear():将这个字典中的所有元素全部删除。 5 size():返回字典所包含元素的数量。与数组的length属性类似。 6 keys():将字典所包含的所有键名以数组形式返回。 7 values():将字典所包含的所有数值以数组形式返回。 has方法   首先实现has(key)方法,后面会被set和remove等方法调用。 1 this .has = function (key) { 2

阮一峰大神ECMAScript 6 入门|笔记整理

三世轮回 提交于 2020-08-15 15:19:04
阮一峰大神ECMAScript 6 入门:https://es6.ruanyifeng.com/ 大家要是看不惯这边的排版,可以去我的语雀看看,语雀真的绝 https://www.yuque.com/isremya/vqgp35 let 和 const 命令 let声明的变量只在它所在的代码块有效。 变量 i 是 var 命令声明的,在全局范围内都有效,所以全局只有一个变量 i 。 变量 i 是 let 声明的,当前的 i 只在本轮循环有效,所以每一次循环的 i 其实都是一个新的变量 另外, for 循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。 for (let i = 0; i < 3; i++ ) { let i = 'abc' ; console.log(i); } // abc // abc // abc ES6 明确规定,如果区块中存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。 即不存在变量提升。 暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。 let 不允许在相同作用域内,重复声明同一个变量。 function func(arg) {

基于web的图书管理系统设计与实现

只谈情不闲聊 提交于 2020-08-15 01:56:49
原文链接: 基于web的图书管理系统设计与实现 系统演示链接: 点击这里查看演示 01 系统简述 图书管理系统就是利用计算机,结合互联网对图书进行结构化、自动化管理的一种软件,来提高对图书的管理效率。本系统采用Java+Servlet+Jsp 的方式实现基于web的图书管理系统。 02 开发工具及相关技术 2.1 Java技术 Java 是由 Sun Microsystems 在 1995 年首先发布的编程语言和计算平台。有许多应用程序和 Web 站点只有在安装 Java 后才能正常工作,而且这样的应用程序和 Web 站点日益增多。Java 快速、安全、可靠。从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Java 无处不在。 2.2 HTML、css、javascript技术 HTML的英文全称是 Hypertext Marked Language,即超文本标记语言。HTML是由Web的发明者 Tim Berners-Lee和同事 Daniel W. Connolly于1990年创立的一种标记语言,它是标准通用化标记语言SGML的应用。用HTML编写的超文本文档称为HTML文档,它能独立于各种操作系统平台(如UNIX, Windows等)。使用HTML语言,将所需要表达的信息按某种规则写成HTML文件,通过专用的浏览器来识别,并将这些HTML文件“翻译

门外汉学习前端开发有前途吗?现在前端开发行情怎么样?

若如初见. 提交于 2020-08-14 04:01:54
对于学习前端开发有前途吗?行情怎么样,好就业吗?这样的问题相信都看了很多很多,每个人的回答都有些差别。但是唯一的一点肯定的,学习前端的前景是很不错的。 接下来,小编来跟大家分享一下2020年Web前端的发展趋势如何?熟悉web的小伙伴们都了解,自2018年是前端技术的发展相对稳定的一年,就前端主流技术框架的发展而言,前几年里发展极快,在填补原有技术框架空白和不足的同时也渐渐趋于成熟。 未来前端在已经趋向成熟的技术方向上面将会慢慢稳定下来,并进入迭代优化阶段,例如语言标准、前端框架等。 那么Web前端的发展趋势如何?让我们一起来看一看吧~ 1.新规范的更新与稳定 前端新标准和草案在不断更新,HTML、CSS、Javascript标准也在渐渐完善,尽管这些新的规范最终会淘汰旧的规范,新的项目也会以最新的标准作为开发依据,但要完全废弃旧规范,还需要一段时间。 目前前端三层结构实现已经形成了HTML5、CSS3、《Ecmascript 6》标准规范,后面的新变化也会越来越小,这就表明了目前前端项目实践规范将会相对稳定一段较长的时间,后面的修改不会像之前一样具有颠覆性。 2.框架技术趋于稳定 从前端应用开发框架上来看,先后经历了DOM API、MVC、MVP、MVVM、Virtual DOM、MNV*阶段,逐步解决了前端开发效率、设计模式、DOM交互性能的问题。 这些问题处理完成后

JavaScript中的参数传递(求值策略),ECMAScript中所有函数的参数都是按值传递吗(系列八)

倖福魔咒の 提交于 2020-08-14 01:59:29
JavaScript中的参数传递 本篇文章主要讲的是JavaScript中最正常不过的现象——函数参数传递,本篇文章篇幅不长,但一定能引发属于你自己的思考! 大家可能会发现,系列的最近几篇文章都围绕着函数来讲,毕竟作为Js中的一等公民,它无处不在; 目录 前言 一、值传递 二、引用传递 三、共享传递 四、总结 写在最后 前言 在研究这个问题之前,大家可以回忆一下,Js基本的数据类型有哪些?如果分类? 原始数据类型值 primitive type,比如 Undefined , Null , Boolean , Number , String 。 引用类型值,也就是对象类型 Object type, 比如Object , Array , Function , Date 等。 这是因为声明变量时不同的内存分配: 原始值:存储在栈(stack)中的简单数据段,也就是说,它们的值 直接存储在变量访问的位置 。它可以直接存储,是因为这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 – 栈 中。这样存储便于迅速查寻变量的值。 引用值:存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存地址。你可以想像成房间内放着你需要的物品,而你手里拿着房间的钥匙。这是因为:引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。相反

GTAjax升級:一劍🗡磨十年改進JavaScript表單遞交瀏覽器異常等

≯℡__Kan透↙ 提交于 2020-08-13 16:57:06
2020年7月以來,持續對 UfqiLong 有福常在 進行升級改進。 改進過程中遇到之前不曾見的問題,在使用 GTAjax進行異步遞交 有福常在UfqiLog 的文章内容時,有隨機性地出現遞交失敗。進一步的跟蹤發現,儅點擊遞交后,GTAjax接管了表單遞交動作並觸發了進度顯示並進行讀秒操作。 但是,詭異的是,GTAjax在後臺並未真的將遞交發送給服務器端後臺。於是我們決定對 GTAjax開啓 debug 模式,進行深入分析,爲何之前不曾有這樣的問題,爲何問題會是隨機性出現,而又爲何,儅第一次遞交失敗后,第二次原樣操作,卻能成功? 帶著這些問題,我們準備深入分析一下。開啓 GTAjax的debug模式相對簡單,在 運行時參數裏: var myGTAjax = new GTAjax(); myGTAjax.set(‘isdebug’, true); 這樣即可打開 GTAjax 的過程數據輸出,從而觀測到整個通訊過程。通過分析debug日志,問題很快鎖定到 postForm.submit() 這個節點上。 也即,在使用 ForceFrame 模式進行表單遞交時,依賴 JavaScript的 HTMLFormElement.submit() 這個方法進行最終的數據遞交。 這個是 W3C、HTML DOM和 JavaScript等標準組織封裝好的方法,無法進一步地往下拆解。問題就轉化為爲何