自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 javascript通过迭代器对象控制生成器

调用生成器函数不一定会执行生成器函数体。通过创建迭代器对象,可以与生成器通信。例如,可以通过迭代器对象请求满足条件的值。console.log('-----------------通过迭代器对象控制生成器----------------');//定义一个生成器,它能生成一个包含两个weapon的序列function* WeaponGenerator() { yield 'Katana...

2018-12-31 13:16:00 170

原创 Android设计模式之适配器模式

适配器模式的定义适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式的使用场景1.系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。2.想要建立一个可以重复使用的类,用于一些彼此之间没有太大关联的一些类,包括可能在将来引进的类一起工作。3.需要一个统一的输出接口,而输入端的类型不可预知。...

2018-12-31 13:10:28 275

原创 android设计模式之组合模式

组合模式(Composite Pattern)也称为部分整体模式(Part-Whole Pattern),结构型设计模式之一,组合模式比较简单,它将一组相似的对象看做一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别。组合模式的定义将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一...

2018-12-30 15:56:32 370

原创 javascript未来的函数:生成器和promise

1.通过生成器让函数持续执行。2.使用promise处理异步任务。3.使用生成器和promise书写优雅代码。ES6语言特性:生成器(generator)和promise(promise)生成器(generator)是一种特殊类型的函数。当从头到尾运行标准函数时,它最多只生成一个值。然而生成器函数会在几次运行请求中暂停,因此每次运行都可能会生成一个值。虽然生成器对JavaScrip...

2018-12-30 15:40:06 406

原创 Android设计模式之代理模式

代理模式(Proxy Pattern)也称为委托模式。代理模式的定义为其它对象提供一种代理以控制对这个对象的访问。代理模式的使用场景当无法或者不想直接访问某个对象或者访问某个对象存在困难时,可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。代理模式的UML类图  角色介绍:Subject:抽象主题类该类的主...

2018-12-29 15:14:30 765

原创 javascript分析闭包和回调函数

<div id="box1">First Box</div><div id="box2">Second Box</div><script> function animateIt(elementId) { var elem = document.getElementById(elementId);

2018-12-29 15:05:21 471

原创 android设计模式之中介者模式

中介者模式包装了一系列对象相互作用的方式,使得对象不必相互明显作用。使它们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立变化。中介者模式将多对多的相互作用转化为一对多的相互作用。中介者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。 Mediator:抽闲中介者角色,定义了同事对象到中介者对...

2018-12-28 19:31:31 388

原创 javascript私有变量的警告

Javascript从未阻止我们将一个对象中创建的属性复制给另一个对象。观察如下代码:console.log("------------通过函数访问私有变量,而不是通过对象访问-------------");function NinjaTest() { var feints = 0; this.getFeints = function () { return feints;...

2018-12-28 19:18:47 246

原创 javascript 研究闭包的工作原理

闭包可以访问创建函数时所在作用域内的全部变量,闭包有用的方法:通过闭包模拟私有变量,通过回调函数使得代码更加优雅。闭包与作用域密切相关。闭包对JavaScript的作用域规则产生了直接影响。使用闭包模拟私有变量的代码console.log("------使用闭包模拟私有变量-------");//在构造函数内部声明变量。由于该变量的作用域在构造函数内部,因此,feints是一个私有变量...

2018-12-27 18:39:39 184

原创 javascript在词法环境中注册标识符

JavaScript作为一门编程语言,其设计的基本原则是易用性。这也是不需要指定函数返回值类型、函数参数类型、变量类型等主要原因。你已经了解到JavaScript是逐行执行的。查看代码如下:firstRonin = 'Kiyokawa';secondRoin = 'Knodo';将Kiyokawa赋值给firstRonin,将Knodo赋值给标识给标识符secondRoi...

2018-12-26 19:00:46 322

原创 WebView实现改变选中区域颜色以及添加下划线

一、Web端实现最近遇到了一个问题,老大要求实现对WebView加载的html页面实现选中修改背景色以及添加下划线并可以删除,最后可以保存这些修改,下次进入该html界面时仍然能够显示之前添加的背景色以及下划线。1.首先需要解决的问题是如何实现对选中的html页面区域添加背景色以及添加下划线。因为考虑到要保存的问题,这部分实现应该在前端实现,通过查找资料,一开始想到的是使用surrou...

2018-12-26 18:53:04 1923 5

原创 javascript定义变量的关键字与词法环境

定义变量的3个关键字——var、let和const,还可以通过与词法环境的关系将其进行分类(换句话说,按照作用域分类)。可以将var分为一组,let与const分为一组。使用关键字var当使用关键字var时,该变量是在距离最近的函数内部或是在全局词法环境中定义的。(注意:忽略块级作用域)这是JavaScript由来已久的特性。console.log("----------------...

2018-12-25 19:21:23 7627

原创 使用词法环境跟踪变量的作用域

词法环境(lexical environment)是JavaScript引擎内部用来跟踪标识符与特定变量之间的映射关系。例如,查看如下代码:var ninja = "Hattori";console.log(ninja);当console.log语句访问ninja变量时,会进行词法环境的查询。注意:词法环境是JavaScript作用域的内部实现机制,人们通常称为作用域(scopes...

2018-12-24 19:25:14 409

原创 理解JavaScript的变量类型

在JavaScript中,我们可以通过3个关键字定义变量:var、let和const。这3个关键字有两点不同:可变性,与词法环境的关系。注意:var关键字从一开始就是JavaScript的一部分,而let与const是在ES6时加进来的。变量可变性如果通过变量的可变性来进行分类,那么可以将const放在一组,var和let放在一组。通过const定义的变量都不可变,也就是说通过const声...

2018-12-23 10:11:49 149

原创 Android设计模式之访问者模式

访问者模式是一种将数据库操作与数据结构分离的设计模式。访问者模式的基本思想           软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象的类都拥有一个accept方法用来接受访问者对象的访问。访问者是一个接口,它拥有一个visit方法,这个方法对访问的对象结构中不同类型的元素    做出不同的处理  。在对象结构的一次访问方法中,我们遍历整个对象结构,对每一个元素...

2018-12-22 10:05:03 375

原创 javascript 通过执行上下文来跟踪代码

在javascript中,代码执行的基础单元是函数。我们时刻使用函数,使用函数进行计算,使用函数更新UI,使用函数达到复用代码的目的,使用函数让我们的代码更容易理解。为了达到这个目标,第一个函数可以嗲用第二个函数,第二个函数可以调用第三个函数,以此类推。当发生函数调用时,程序会回到函数调用的位置。 JavaScript引擎是如何跟踪函数的执行并回到函数的位置的?JavaScript代码...

2018-12-21 19:13:25 1300

原创 Android源码设计模式之模板方法模式

在面向对象开发中,通常会遇到这样一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而改变的,例如,执行程序的流程大致如下:1.检查代码的正确性;2.链接相关的类库;3.编译相关的代码;4.执行程序;对于不同的程序设计语言,上述4个步骤是不一样的,但是,它们的执行流程是固定的,这类问题的解决...

2018-12-20 19:39:26 213

原创 JavaScript回调函数

处理回调函数是另一种常见的使用闭包的场景。回调函数指的是需要在将来不确定的某一时刻异步调用的函数。通常,在这种回调函数中,我们经常需要频繁地访问外部数据。<div id="box1">First Box</div><script>function animateIt(elementId) { //在动画函数中,animatelt内部,获取DOM元素...

2018-12-19 19:21:54 3514

原创 微信小程序工程删除一个目录后提示保存失败:Error ENOENT no such file or directory, open

看一下当前已经打开的文件中是否还存在已经删除文件,如果存在就将其关闭,就能解决这个问题了。 

2018-12-19 13:41:07 5089

原创 Android设计模式之迭代器模式

迭代器模式又称游标模式, 是行为型设计模式之一。迭代器模式源于对容器的访问,比如Java中的List、Map、数组等。对容器对象的访问必然会涉及到遍历算法,可以将遍历算法封装在容器中,或者不提供遍历算法。如果将遍历算法封装在容器中,那么容器类就承担了过多的功能,容器类不仅要维护自身内部的数据元素,而且还要对外提供遍历的接口方法,因为遍历状态的存储问题还不能对同一个容器同时进行多个遍历操作,如果...

2018-12-18 19:21:08 283

原创 JavaScript使用闭包

封装私有变量许多编程语言使用私有变量,这些私有变量是对外部隐藏的对象属性。这是非常有用的一种特性,因为当通过其他代码访问这些变量时,我们不希望对象的实现细节对用户造成过度负荷。遗憾的是,原生JavaScript不支持私有变量。但是,通过使用闭包,我们可以实现很接近的、可接受的私有变量。console.log("-----------------------使用闭包模拟私有变量------...

2018-12-17 19:15:02 174

原创 android设计模式之备忘录模式

备忘录模式的使用场景1.需要保存一个对象在某一个时刻的状态或部分状态。2.如果用一个接口来让其他对象得到这些状态,将会暴露对象的实现细节并破坏对象的封装性,一个对象不希望外界直接访其内部状态,通过中间对象可以访问其内部状态。  1.Originator:负责创建一个备忘录,可以记录、恢复自身的内部状态。同时Originator还可以根据需要决定Memento存储自身哪些内部...

2018-12-16 09:29:26 925 1

原创 javascript闭包和作用域

闭包是javascript的显著特征。虽然许多JavaScript开发者在开发时没有理解闭包的主要优势,但是使用闭包,不仅可以通过减少代码数量和复杂度来添加高级特性,还能实现不太可能完成的功能。换句话说,如果没有闭包,事情将变得非常复杂。例如,如果没有闭包,事件处理和动画等包含回调函数的任务,它们的实现变得复杂的多。除此以外,如果没有闭包,将完全不可能实现私有变量。 闭包允许函数访问并操作...

2018-12-15 17:11:55 216

原创 Android设计模式之观察者模式

观察者模式使用率较高,因为这个模式最重要的作用就是解耦,将观察者和被观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。观察者模式的定义定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。观察者模式的使用场景关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系。事件多级触发场景。跨系统的消息交换场景,如消息...

2018-12-15 10:12:01 252

原创 javascript 实现继承

实现继承1.ES6之前的版本重中实现继承是一件痛苦个事。如下面代码:function Person() {}Person.prototype.dance = function(){};function NinjaTest() {}NinjaTest.prototype = new Person();Object.defineProperty(NinjaTest.prototype...

2018-12-13 19:29:31 150

原创 javascript之instanceof操作符

在大部分语言的中,检测对象是否是类的最直接方法是使用操作符instanceof。例如,在Java中,使用操作符instanceof检测左边的类和右边的类是否是同一个子类。它的作用是用来判断,instanceof 左边对象是否为instanceof 右边类的实例,返回一个boolean类型值。还可以用来判断子父类的所属关系。虽然在JavaScript中操作符instanceof与java中基本类...

2018-12-11 19:16:30 339

原创 JavaScript解决constructor属性被覆盖的问题

为了实现 NinjaTestInherit继承Person,产生了这样的问题:当把NinjaTestInherit的原型设置为Person的实例对象后,我们丢失了原来在constructor中的NinjaTestInherit原型。如果我们不希望丢失constructor属性,constructor属性可用于确定用于创建对象实例的函数。使用Object.defineProperty方法在 Ni...

2018-12-10 18:41:19 1038 2

原创 微信小程序真机调试报错解决方案 error code 50003

解决方案:关闭开发工具,重启下就行了。 

2018-12-09 14:21:35 13196 2

原创 Android设计模式之命令模式

命令模式是行为型设计模式之一,命令模式大概是将一系列的方法调用封装,用户只需要调用一个方法执行,那么所有这些被封装的方法就会被挨个执行调用。命令模式的定义将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式的使用场景1.需要抽象出待执行的动作,然后以参数的形式提供出来——类似于过程设计中的回调机制,而命令模式正...

2018-12-09 10:45:01 389

原创 JavaScript配置对象属性

在JavaScript中,对象是通过属性描述(property descriptor)进行描述的,我们可以配置以下关键字。1.configurable——如果设置为true,则可以修改或者删除属性。如果设置为false,则不允许修改。2.enumerable——如果设置为true,则可在for-in循环对象属性使出现。3.value——指定属性的值,默认为undefined。4.w...

2018-12-08 14:56:27 1315

原创 JavaScript重写constructor属性的问题

console.log("-----------------------使用原型实现继承---------------------------");function Person() {}Person.prototype.dance = function () {};function NinjaTestInherit() {}//通过将NinjaTest的原型赋值给Person实例...

2018-12-08 13:59:26 845

原创 JavaScript之实现继承一

console.log("----------------------------------------实现继承----------------------------------------");//继承(Inheritance)是一种在新对象上复用现有对象的属性的形式。这有助于避免重复代码和重复数据。在JavaScript中,继承原理和其他的面向对象语言略有不同。console.log...

2018-12-08 10:03:36 243

原创 Android设计模式之解释器模式

解释器模式(Interpreter Pattern),是一种用的比较少的行为型设计模式,其提供了一种解释语言的语法或表达式的方式。该模式定义了一个表达式接口,通过该接口解释一个特定的上下文。解释器模式的定义给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言的句子。解释器模式的使用场景1.如果某个简单的语言需要解释执行,而且可以将该语言中的语句表示为...

2018-12-05 20:03:46 341

原创 javascript构造函数实现对象类型

虽然知道JavaScript如何使用原型查找引用属性,这一点很重要,但也需要知道对象实例是通过哪个函数构造创建的。我们可以通过构造函数的原型中的constructor属性访问对象的构造器。例如,下图展示了当使用Ninja构造器初始化一个对象实例时,应用程序的状态。每个函数的原型对象都具有一个constructor属性,该属性指向函数本身。通过使用constructor属性,我们可以访问...

2018-12-03 19:09:52 471

原创 Beyond Compare许可证密钥已被撤销解决方案

  文件夹的目录:C:\Users\user\AppData\Roaming\Scooter Software\Beyond Compare 3 删除该文件夹下所有的文件。然后打开Beyond Compare,执行重新安装。

2018-12-02 10:49:30 818

原创 JavaScript动态特性的副作用

JavaScript是一门动态语言,可以很容易地添加、删除和修改属性。这种特性同样适合于原型,包括函数原型和对象原型。console.log("---------------通过原型,一切都可以在运行时修改------------");//定义了一个构造函数,该构造函数中创建了一个swung属性,初始化为布尔值function NinjaTest3() { this.swung = ...

2018-12-02 10:00:12 1181 1

原创 android设计模式之责任链模式

责任链模式介绍责任链模式(Iterator Pattern),是行为型设计模式之一。什么是“链”?我们将多个节点首尾相连所构成的模型称为链。将每一个节点看做是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径依次传递给每一个节点对象,直到有对象处理这个请求为止,这种模式称为责任链模式。责任链模式的定义使多个对象都有机会处理请求,从而避免了请求的发送者和...

2018-12-02 09:50:25 223

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除