深入浅出

深入浅出的分析 Set集合

旧街凉风 提交于 2019-12-05 11:32:26
01. 摘要 Set集合的特点主要有:元素不重复、存储无序的特点。 打开 Set 集合,主要实现类有 HashSet、LinkedHashSet 、TreeSet 、EnumSet( RegularEnumSet、JumboEnumSet )等等,总结 Set 接口实现类,图如下: 由图中的继承关系,可以知道,Set 接口主要实现类有 AbstractSet、HashSet、LinkedHashSet 、TreeSet 、EnumSet( RegularEnumSet、JumboEnumSet ),其中 AbstractSet、EnumSet 属于抽象类,EnumSet 是在 jdk1.5 中新增的,不同的是 EnumSet 集合元素必须是枚举类型。 HashSet 是一个输入输出无序的集合,集合中的元素基于 HashMap 的 key 实现,元素不可重复; LinkedHashSet 是一个输入输出有序的集合,集合中的元素基于 LinkedHashMap 的 key 实现,元素也不可重复; TreeSet 是一个排序的集合,集合中的元素基于 TreeMap 的 key 实现,同样元素不可重复; EnumSet 是一个与枚举类型一起使用的专用 Set 集合,其中 RegularEnumSet 和 JumboEnumSet 不能单独实例化,只能由 EnumSet 来生成

深入浅出 JavaScript 中的 this

你说的曾经没有我的故事 提交于 2019-12-04 16:47:36
JavaScript 是一种脚本语言,因此被很多人认为是简单易学的。然而情况恰恰相反,JavaScript 支持函数式编程、闭包、基于原型的继承等高级功能。本文仅采撷其中的一例:JavaScript 中的 this 关键字,深入浅出的分析其在不同情况下的含义,形成这种情况的原因以及 Dojo 等 JavaScript 工具中提供的绑定 this 的方法。可以这样说,正确掌握了 JavaScript 中的 this 关键字,才算迈入了 JavaScript 这门语言的门槛。 在 Java 等面向对象的语言中,this 关键字的含义是明确且具体的,即指代当前对象。一般在编译期确定下来,或称为编译期绑定。而在 JavaScript 中,this 是动态绑定,或称为运行期绑定的,这就导致 JavaScript 中的 this 关键字有能力具备多重含义,带来灵活性的同时,也为初学者带来不少困惑。本文仅就这一问题展开讨论,阅罢本文,读者若能正确回答 JavaScript 中的 What ’s this 问题,作为作者,我就会觉得花费这么多功夫,撰写这样一篇文章是值得的。 Java 语言中的 this   在 Java 中定义类经常会使用 this 关键字,多数情况下是为了避免命名冲突,比如在下面例子的中,定义一个 Point 类,很自然的,大家会使用 x,y 为其属性或成员变量命名

ES6深入浅出-8 新版的类(下集)-2.全部语法

こ雲淡風輕ζ 提交于 2019-12-04 05:51:13
解答提问 两边都没有构造函数的情况 父类没有构造函数,子类有构造函数的情况 下面用到的了this.body这个属性,所以super()必须要放在这行代码的上面。 在调用this之前必须调用super() 公有属性如果是一个数字,用原型可以,class不行 在原型上加人类的属性 在原型上加上了。 通过class的函数返回字符串来达到想要的效果 get和set 前面加get 调用的时候就可以不用加括号了 p1的race实际上是一个函数。 刚开始写错了,后期想去修正,没法修改。因为你始终是在调用这个函数。这个函数始终返回运物这两各字 可以 用set去赋值,接收value这个参数。。但是获取到的数据存在哪里呢? 用隐藏的_race去存这个值。 这样就可以修改这个值了。 这就叫做属性封装 get用来控制属性只读 人类不能改自己的年龄。现在是可以改 对人类的读和写做出控制,先把age用下划线隐藏起来。只给age准备get方法。不准备set方法。 无法修改。还是原来的值 set控制写 控制name最多是四个字 还是原来的值 无法写 MDN上关于class的所有语法 静态方法 只能通过Person访问到静态方法。 species 物种;种类;异种 distance 间隔;路程;远离 结束 来源: https://www.cnblogs.com/wangjunwei/p/11834118.html

ES6深入浅出-8 新版的类(下集)-1.简单语法

自闭症网瘾萝莉.ら 提交于 2019-12-04 04:54:36
回顾 当你声明一个空的对象obj的时候,会生成一块内存这个内存里面什么都没有,自由__proto__存在401的地址。 也就是Object的protototype在内存中的地址 类 通过函数创建类。这就是构造函数的由来。 用函数来创建某一类的对象,这个函数就叫做构造函数。 公有属性和私有属性 class constructor用来构造自有属性。 公有属性 p1的walk和p2的walk是同一个walk 复杂语法 类必须用new去创建。 this就是p1这个对象 extends pserson继承Animal 在构造函数内必须执行super() 自有属性和公有属性 第三层在animals里面获得公有属性。 因为p1是person类 所有拥有自有属性name和age。p1有move的属性因为person继承了Animal 那么p1的自有属性只有name和age,没有body。 所以必须要执行super()。 super()的意思就是执行你继承的那个类的构造方法 相当于把this.body这句话弄过来了。这样person就有三个自有属性。 继承的类叫做基类或者超类 结束 来源: https://www.cnblogs.com/wangjunwei/p/11832339.html

ES6深入浅出-7 新版的类(上集)-2.介绍JS中的类

ε祈祈猫儿з 提交于 2019-12-04 04:49:33
声明对象原型,公有属性。 obj对象,它用一个属性__proto__记录了自己的原型 改掉它的原型为公有属性。那么obj这个对象及有了hi的方法。因为obj自己没有hi。那么就去自己的原型上去找了。 obj.hi等价于公有属性.hi.call(obj). obj作为参数传递了过去。 obj把自己传给hi。原型里面必须通过this去拿到。this是隐藏的真正的第一参数。 oobj对应的this,yyy对应的第二个参数a 用简单的方式 修改了原型,原型上的hi方法输出hi 使用原型来模拟类 同一类对象称为一个类,那么怎么用代码去表示他呢? 第一种是通过文档的方式去规定。 强制要求,提供一个函数来创建这一类的对象。 如果要创建人类那么就调用createPerson这个函数。里面规定了默认的name和age 人和人之间有一些共通的属性,也就是原型。 自由两个属性,共有两个属性 结束 来源: https://www.cnblogs.com/wangjunwei/p/11832148.html

ES6深入浅出-7 新版的类(上集)-1.介绍原型

淺唱寂寞╮ 提交于 2019-12-04 04:44:52
ES6新出的关键class BE受雇与网景开发了JS 当我们在写一个对象的时候,我们实际上内存的形式表示。 obj等于一个空对象,可以直接toString。它为什么可以有toString window是一个全局的对象。 window下有个object的属性。 通过window.Object.prototype找到了toString 为了方便理解,当说原型的时候 先理解为共用属性。 toString是很多对象的共用属性。 当谢var obj为一个空对象的时候,为什么可以获取到toString的方法呢??? 当你写这个空对象的时候,因为js做了一个特殊的逻辑 每一个对象都会有一个xxx属性指向它的原型, 当访问obj.toString的时候。这个xxx就起作用了。实际上调用的是409的toString 这样可以做到代码复用。再声明一个obj2同样可以用到toString 数组的toString是怎么拿到这个123的 为什么不同的对象调用同一个toString,得到不同的结果 当写obj.toString等价于写obj.toString.call(obj) 。等价call这个参数,并把这个参数传进去。 push的原型是怎么获取到的 当调用a.push的时候,会去内存里面所有的对象里面去找这个方法,找到xxx里面,再找到原型里面找到了push方法 结束 来源: https://www

ES6深入浅出-5 新版对象-2.属性修饰符

时光总嘲笑我的痴心妄想 提交于 2019-12-04 01:43:28
对象语法增强 已经有了个对象的新增语法 还需要一个api来做呢?、 因为有的时候,你需要在旧的对象上添加get、set。 读的时候就走get 写的时候就走set 假设很早之前在项目里写了一个old对象,它的属性都是写好的,现在想给oldObject加get、set。没有办法再去重新定义它 这个api是给已经定好的对象,来不及再去重新定义的对象修改属性, 这样就可以设置oldObject的值为1. 但是set方法里面什么也没做。所以输出oldObject.x的值为undefined 这个api还有其他的功能,这些功能都是js的坑造成的 undefined是不是关键字呢? 如果一个东西是关键字,就没有办法声明同样的变量,function是个关键字,所以你没有办法声明一个关键字是function 同样的this也是一个关键字 可以声明变量undefined。所以undefined不是关键字。 null也事关键字不可以声明。 undefined是只读的变量 ,所以上面把undefined设置为1 没有设置成功。 常量a,设置a的值就会报错。 由此我们可以推断。undefined不是一个常量,因为我们可以给它赋值 如果undefined是变量的话 给它赋值,值却不变。所以它是不可改变值的变量。 所有的全局变量都是window上的属性而已。所以我们把undefined叫做window的只读属性

ES6深入浅出-5 新版对象-1.如何创建对象

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-04 00:13:25
对象属性的加强: 可以通过 new Object() , Object.create() 方法,或者使用字面量标记(初始化标记)初始化对象。 一个对象初始化器,由花括号/大括号 ( {} ) 包含的一个由零个或多个对象属性名和其关联值组成的一个逗号分隔的列表构成。 上面那句话说的是如何产生一个新的对象。 下面代码。a就是一个空对象, 空对象只有一个属性。那就是_proto_ 使用object.create去创建对象,需要传个参数,这里传null。就真的是一个空对象了,里面什么都没有 Object.create是ES6的语法新增的,产生一个真正什么都没有的对象。 去调用它的任何方法都是没有的,例如下面调用toString的方法 上面创建的a还是有一些自己的方法的 例如toString ES6创建另外一种方式,传入参数Object.prototype。那么这个c就和ES5语法创建的a对象是一样的了。 ={}等价于new Object() 输出d对象,看一下和a是一样的 看起来就是个对象,这就是自面量 如果是用函数造的对象就是 非字面量 ES6就是多了个空能可以产生真正的空对象。 ES5的时候是没法产证真正的空对象的。除非是产生后,再把这个属性删掉。 ES2015就是ES6,因为ES6是2015年发表的。 ES6的新标记 获取对象的属性,下面两个是等价的 新的语法,ES6的对象会 更严格

深入浅出 JavaScript 中的 this

此生再无相见时 提交于 2019-12-03 13:38:43
在 Java 等面向对象的语言中,this 关键字的含义是明确且具体的,即指代当前对象。一般在编译期确定下来,或称为编译期绑定。而在 JavaScript 中,this 是动态绑定,或称为运行期绑定的,这就导致 JavaScript 中的 this 关键字有能力具备多重含义,带来灵活性的同时,也为初学者带来不少困惑。本文仅就这一问题展开讨论,阅罢本文,读者若能正确回答 JavaScript 中的 What ’s this 问题,作为作者,我就会觉得花费这么多功夫,撰写这样一篇文章是值得的。 Java 语言中的 this 在 Java 中定义类经常会使用 this 关键字,多数情况下是为了避免命名冲突,比如在下面例子的中,定义一个 Point 类,很自然的,大家会使用 x,y 为其属性或成员变量命名,在构造函数中,使用 x,y 为参数命名,相比其他的名字,比如 a,b,也更有意义。这时候就需要使用 this 来避免命名上的冲突。另一种情况是为了方便的调用其他构造函数,比如定义在 x 轴上的点,其 x 值默认为 0,使用时只要提供 y 值就可以了,我们可以为此定义一个只需传入一个参数的构造函数。无论哪种情况,this 的含义是一样的,均指当前对象。 清单 1. Point.java public class Point { private int x = 0; private int

深入浅出--js闭包的理解

匿名 (未验证) 提交于 2019-12-03 00:40:02
好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了。好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法、用法和用途。 1、什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包的特点:   1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。   2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。   简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。 2、闭包的几种写法和用法 首先要明白,在JS中一切都是对象,函数是对象的一种。下面先来看一下闭包的5种写法,简单理解一下什么是闭包。后面会具体解释。 //第1种写法 function Circle(r) { this.r = r; } Circle.PI = 3.14159; Circle.prototype.area = function() { return Circle.PI * this.r * this.r; } var c =