你真的会写深度拷贝吗?

/** 这个深度拷贝函数可以实现任何的数据的复制 包括 用户自定义对象 等 传入要复制的值,返回复制后的值这种复制并不是完美的,对于对象上的[class]内部属性没有被复制,所以不能基于通过 获得[class]内部属性值的方式判断对象的类型.但可以通过判断原型的方式去判断对象的 类型这个深度复制的...

2017-07-11 18:44:16

阅读数 324

评论数 0

深入理解js面向对象——创建对象

本博客原文在这 由于js这门语言是解析型语言的特性,导致js中的对象更加灵活,更像是一些 属性的集合,或者说类似于散列表或者字典这些数据结构.所以我们可以在使用的时候随着需求对对象中的属性进行增删改查,这完全是动态的不是编译好的.那么 js中的对象是怎么表示的? js对象的内部表示原理是什么?...

2017-07-04 15:50:11

阅读数 2726

评论数 0

单例模式(singleton)

单例模式(singleton) 单例模式singleton 单例模式定义 如何实现单例模式 方式一 方式二 方式三 js中的单例模式 惰性单例 单例模式定义 保证类只有一个实例,并且全局可以访问到它 在前端项目中,还是有很多地方要求一个类只能由一个实例的。比如在一个页面中有登录部分,每次...

2017-06-22 19:22:03

阅读数 450

评论数 0

适配器(adapter)模式在JS中实践

适配器(adapter)模式 定义 将一个类(对象)的接口(方法或者属性)转化成另外一个接口以满足用户需求,使类(对象)之间接口的不兼容问题通过适配器得以解决。         换句话说,就是我用我的接口,但是还是用你的服务。举个例子:        有一天你从香港买来一个iphone8,但...

2017-06-02 10:18:15

阅读数 2722

评论数 3

创建对象的几种方式

在javascript中,所有对象的创建都是基于原型的。在js中任意的对象都有一个内部属性[[Prototype]]。这个属性的值只能是object或者是null。对象有这个内部属性的目的就是为了实现继承,或者更明确的说实现属性(方法)的复用。所以说创建一个对象的关键就是确定[[prototype...

2017-04-11 18:25:20

阅读数 3749

评论数 0

里氏替换原则(LSP)

一、为什么需要LSP 先看一个例子,有一个下载类,需要将要下载的file 保存在硬盘中。   <script> //硬盘类 function HardDisk () { this.save = function (file) { ...

2017-04-09 19:33:21

阅读数 354

评论数 0

[] == false,和!![] == false结果为什么不一样?探究 == 本质

console.log([] == false, !![] == false);// true false console.log([] === false, !![] === false);// false false console.log([] == []);// false var a =...

2017-04-08 16:38:29

阅读数 7455

评论数 0

webkit资源加载

在浏览器整个渲染过程中,资源获取这一过程无疑是最消耗时间的,同时浏览器内核也通过了各种方式去减少事件,比如资源加载多线程、并发下载资源、DNS预处理、缓存资源、缓存网络请求等。下面介绍从用户输入URL到得到资源发生了什么,但是这个过程也是粗略的解读,对于详细的过程以及高性能的部分要去,相信《h...

2017-04-07 18:16:03

阅读数 645

评论数 0

webkit内核渲染过程概述

由于资源加载过程和网络模块都可以多并发多线程的执行,所以可以请多个URL没有必要等到上一次url执行完毕之后在处理下一个URL,但即便如此也是需要一个url缓存的以便于应对多并发的情况。 经过资源加载和网络模块之后,由于在整个渲染过程中,这个模块是非常慢的,只至于能把这一部分的优化做好可...

2017-04-07 16:04:38

阅读数 805

评论数 0

我是这么理解设计和模式的

以下完全是我个人的理解,毕竟我项目经验不是很丰富,未免对一些概念理解有偏差,请多多斧正。   现代一个软件开发无论是遵循敏捷开发也好都是不断迭代的,之所以迭代是因为在开发过程中出现了很多问题,但是最重要的一个因素就是需求的不断变化,这个需求可能是增加的新功能或者是原来需求行为的改变。 ...

2017-04-07 12:32:25

阅读数 249

评论数 0

使用var、let、const声明变量

一、使用var声明变量1、使用方法通过var关键字可以一次声明一个变量或者多个变量,同时可以为声明的变量赋初始值。但是变量的声明和初始值并不是在同一时间执行的,在执行初始值之前这些声明的变量的值为undefined。'use strict'; var x = 12, y = x;2、声明变...

2017-04-05 21:56:44

阅读数 952

评论数 0

面向对象的javascript系列文章(3)继承——代码重用

          javascript中如何实现继承   1.1类式继承 <!DOCTYPE html> <html lang="en"> &amp...

2017-03-27 15:07:01

阅读数 233

评论数 0

面向对象的javascript系列文章(2)封装——信息隐藏

  封装是为了实现在分析层面分离关注点的行为,目的是为了达到信息隐藏。       一、封装是分离关注点的一种实现方式         对于一个复杂的系统来说,经过抽象之后,可以清楚的看到一个层次结构。对于每一层的抽象,都是由多个模块组成的,这些模块之间互相通信以便于为了上一层...

2017-03-26 22:00:12

阅读数 373

评论数 0

面向对象的javascript系列文章(1)接口——是一个标准委员会

在面向对象开发中,接口确实是一个特别抽象的名词,加上一些语法的赘述,“醉了~”有木有。 一般在java中对于接口的定义会是这样的:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(...

2017-03-25 20:30:38

阅读数 945

评论数 0

Sublime Text常用命令

选择类Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本。Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑。举个栗子:快速选中并更改所有相同的变量名、函数名等。Ctrl+L 选中整行,继续操作则继续选择下一行,效果和 Shift+↓ 效果一样。Ctrl+S...

2017-03-22 11:17:39

阅读数 692

评论数 1

git 常用命令笔记

初始化git init git config git clone [url]设置贡献者 name email git config –global user.name git config –global user.email 查看所有配置项 git config –list...

2017-03-22 11:15:38

阅读数 321

评论数 0

javascript中关于浮点数不精确问题解决方案

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"&am...

2017-03-22 11:01:47

阅读数 358

评论数 0

深入理解函数内部原理(6)——函数的内部方法call、apply、bind

call和apply这两个方法都是打破了解析器在函数调用时创建执行环境时赋值this绑定的时候的内部规则,直接通过Function内置标准类型的prototype属性中的两个方法call和apply进行明确的声明this的值。 但是这里的call是自定义的用户可以使用的可以编程的,还有任何一个函...

2017-03-08 21:22:31

阅读数 2593

评论数 0

深入理解函数内部原理(5)——闭包

什么是闭包其实通过前面几篇博客系统的介绍了函数的定义调用执行过程之后,带现在应该可以隐隐约约的感觉的闭包的存在了。 什么是闭包呢?我的理解就是 函数定义的时候的作用域链在函数调用的时候依然有效,这就是闭包。 那么js内部是怎么实现的呢?还记得函数对象有一个内部属性是[Scope]吗?挡在函数创...

2017-03-08 15:02:49

阅读数 430

评论数 0

深入理解函数内部原理(4)——通过new操作符调用构造函数

以new Experssion(args) 过程一:先确定是否是一个构造函数 先解析Experssion比姑且通过getValue方式取得该值F,通过判断这个值F是否是一个对象,并且这个对象F是否具有Construct内部方法,如果是的话证明是一个函数,否则抛出一个TypeError异常。过程...

2017-03-08 11:05:22

阅读数 760

评论数 0

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