什么是散列表? 散列表是Dictionary(字典)的一种散列表实现方式,字典传送门 一个很常见的应用是使用散列表来表示对象.Javascript语言内部就是使用散列表来表示每个对象.此时,对象的每个属性和方法(成员)被存储为key对象类型,每个key指向对应的对象成员. 以字典中使用的电子邮件地址簿为例.我们将使用最常见的散列函数:lose lose散列函数,方法是简单的将每个键值中的每个字符的ASCII值相加,如下图所示: 创建散列表 class HashTable { this.table…
游戏要用到的一些图片.声音等资源都需要提前加载,有时候如果资源很多,就有必要做一个资源加载进度的页面,提高用户等待的耐心.这里我们用一个state来实现它,命名为preload. 因为资源加载进度条需要一个进度条的背景图片,所以在制作这个state前,我们还需要另一个最基础的state,用来加载那张进度条图片,我们命名为boot. 复制代码 game.States.boot = function(){ this.preload = function(){ game.load.image('loa…
尽管Object是一个具体的类,但设计它主要是为了扩展.它的所有非final方法都有明确的通用约定.任何一个类在override时,必须遵守这些通用约定. 一.覆盖equals时请遵守通用的约定 1.Object中默认的equals方法约定是:类的每个实例都只与它自身相等.当类有自己特有的“逻辑相等”的概念时,就应该覆盖equals方法. 2.Timestamp对Date进行了扩展,Timestamp的equals实现确实违反了对称性.如果Timestamp和Date混合一起使用,可能导致不正确…
[[Prototype]]机制 [[Prototype]]是对象内部的隐试属性,指向一个内部的链接,这个链接的作用是:如果在对象上没有找到需要的属性或者方法引用,引擎就 会继续在 [[Prototype]] 关联的对象上进行查找.同理,如果在后者中也没有找到需要的 引用就会继续查找它的 [[Prototype]],以此类推.这一系列对象的链接被称为“原型链”. function Foo() { // ... } var a = new Foo(); Object.getPrototypeOf(…
代理模式:是为一个对象提供一个代用品或占位符,以便控制对它的访问. 代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对象.替身对象对请求做出一些处理之后,再把请求转交给本体对象.基本可以理解为粉丝(客户),经纪人(代理),偶像(对象).经纪人就相当于偶像的代理,需求直接提给经纪人,经纪人这边可以进行很多逻辑上的处理,比如可以帮助偶像过滤掉很多请求等等. 1.保护代理和虚拟代理 像上面那种,请求被代理拒绝掉就是保护代…
组合模式:一些子对象组成一个父对象,子对象本身也可能是由一些孙对象组成. 有点类似树形结构的意思,这里举一个包含命令模式的例子 var list=function(){ //创建接口对象的函数 return { arr:[], //执行列表 用来存储需要执行的对象 add:function(obj){ //往执行列表里添加对象 this.arr.push(obj); }, execute:function(){ //遍历执行列表,每个对象执行规定好的接口方法 for(var i=0,l=this…
命令模式:有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么,此时希望用一种松耦合的方式来设计软件,使得请求发送者和请求接收者能够消除彼此之间的耦合关系. 说法很复杂,简单来说就是希望真正做事情的对象不要直接被调用,当我们下达一些命令之后, 希望对象已经间接的执行了.这样做的好处是可以解耦,代码可以更为灵活,还可以管理命令,甚至完成命令队列这样的操作. 实现思路 为了实现这种效果,我们需要通过一个函数,创造一个接口对象,调用接口对象的方法,就是调用对象真正的方…
<Thinking In Java>阅读笔记 前四章:对象导论. 一切都是对象. 操作符. 控制执行流程 public在一个文件中只能有一个,可以是一个类class或者一个接口interface >一旦创建一个引用,就希望它能与一个新的对象相关联: String s = "hello"; String s = new String("hello"); s:遥控器(引用) “hello”:电视机(对象) 数据存储在: 寄存器:最快的存储区,在处理器内…
1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name(key)和liushijie(key)就存储在SDS中. SDS数据结构如下: struct sdshdr { // 所保存字符串的长度 int len; // 未使用字节长度 int free; // 字节数组,保存字符串 char buf[]; }; SDS遵循C字符串以'\0'空字符串结尾的惯例,所…
JavaScript判断对象的类型 最近阅读了一些关于JavaScript判断对象类型的文章.总结下来,主要有constructor属性.typeof操作符.instanceof操作符和Object.prototype.toString()方法这四个方式来判断对象的类型. constructor属性 构造函数预定义的constructor属性是构造函数本身. var Foo = function(){}; Foo.prototype.constructor === Foo;//true 通过ne…