
JavaScript
DoubleSRZee
这个作者很懒,什么都没留下…
展开
-
JavaScript中的原型(链)&继承(一)
Zee有话说^_^,下面的内容大部分摘自《Professional JavaScript for Web Developers (3rd edition )》和《JavaScript语言精粹与编程实践》。结合书中一些概念,总结了对书中知识的理解。为了方便自己回顾以及帮助更多朋友。可能有不准确的地方,希望交流探讨。博文相关内容解析:构造器(constructor)–> 构造函数——(构造器实际原创 2017-05-04 18:02:15 · 436 阅读 · 0 评论 -
原型模式&原型继承
使用克隆的原型模式从设计模式角度讲,原型模式是用于创建对象的一种模式,如果我们要创建一个对象,一种方法是先指定它的类型,然后通过类来创建这个对象。原型模式选择了另外一种方式,不用关心对象的具体类型,而是通过克隆来创建一个一模一样的对象。原型模式的实现关键,是语言本身是否提供了clone方法。ECMAScript5提供了Object.create方法,可以用来克隆对象。var Plane = ...原创 2018-10-12 20:21:58 · 235 阅读 · 0 评论 -
JS深拷贝
function deepClone(obj){ let objClone = Array.isArray(obj) ? [] : {}; if(obj && typeof obj === "object"){ for(key in obj){ if(obj.hasOwnProperty(key)){ //判断obj子元素是否为对象,如果是,递归复制 ...原创 2018-10-22 13:40:51 · 152 阅读 · 0 评论 -
函数柯里化
函数柯里化与函数绑定密切相关,它用于创建已经设置好了一个或多个参数的函数。基本方法和函数绑定一样:使用一个闭包返回一个函数。两者的区别在于,当函数被调用时,返回的函数还需要设置一些传入的参数。function add(num1, num2){ return num1 + num2;}function curriedAdd(num2){ return add(5, num2);}...原创 2018-10-22 14:25:22 · 169 阅读 · 0 评论 -
JavaScript快速排序
function quickSort(arr){ var arrLeft = [], arrRight = [], arrLen = arr.length, pointIndex = parseInt(arrLen / 2), point = arr[pointIndex]; for(var i = 0; i < arrLen; i++){ if(i === poin...原创 2018-10-22 14:34:08 · 153 阅读 · 0 评论 -
函数节流
函数节流背后的基本思想是指,某些代码不可以在没有间断的情况连续重复执行第一次调用创建一个定时器,在指定的时间间隔之后运行代码。而当第二次调用该函数时,它会清除前一次的定时器并设置另一个。如果前一个定时器已经执行过了,这个操作就没有任何意义。然而,如果前一个定时器尚未执行,其实就是将其替换为一个新的定时器。目的是只有在执行函数的请求停止了一段时间之后才执行。var processor = {...原创 2018-10-22 15:58:14 · 178 阅读 · 0 评论 -
箭头函数
箭头函数表达式的语法比函数表达式更短,并且没有自己的this,arguments,super或new.target。这些函数表达式更适用于那些本来就需要匿名函数的地方,并且它们不能用作构造函数。基础语法(参数1,参数2,...,参数N) => { 函数表达式 }(参数1,参数2,...,参数N) =>表达式(单一)//相当于:(参数1,参数2,...,参数N) =&am原创 2018-10-23 15:28:11 · 1551 阅读 · 0 评论 -
JavaScript二分查找(折半查找)
function binarySearch(arr, key) { var low = 0, high = arr.length - 1; while(low <= high) { var mid = parseInt((high + low) / 2); if(key == arr[mid]) { return mid; } else if (key &a原创 2018-10-23 21:21:58 · 335 阅读 · 0 评论 -
JavaScript合并两个有序数组
function mergeArray(arr1,arr2){ var ind1=0; //标记arr1的对比元素的初始索引值 var ind2=0; //标记arr2的对比元素的初始索引值 var arr=[]; //作为输出的新数组 while(ind1<arr1.length && ind2<arr2转载 2018-10-26 12:31:51 · 429 阅读 · 1 评论 -
JavaScript数组去重
下面是用来创建随机数数组的函数(1-1000)function createRandomArr(len){ var arr = []; for(var i = 0; i < len; i++) { arr[i] = Math.floor(Math.random() * 1000) + 1; } return arr;}1、for循环(嵌套)+ 新数组function s...转载 2018-10-26 15:02:29 · 195 阅读 · 0 评论 -
ES6&ES5实现观察者模式(发布订阅者模式)
ES6class Observer{ constructor(){ this.handle = []; } addSubscribe(topic, fn) { this.handle.push({topic: topic, fn: fn}); console.log(this.handle); } removeSubscribe(topic, fn) { let ind...原创 2018-10-26 19:35:27 · 1190 阅读 · 0 评论 -
原型规则
var obj = {};obj.a = 100;var arr = []; arr.a = 100;function fn() {}fn.a = 100;console.log(obj.__proto__);console.log(arr.__proto__);console.log(fn.__proto__);console.log(fn.prototype);conso...原创 2018-10-24 15:12:01 · 267 阅读 · 0 评论 -
JavaScript字符串相关题目
正则匹配-驼峰转换function test(str) { var re = /-(\w)/g; return str.replace(re, function($0, $1){ return $1.toUpperCase(); });}test(str);//border-bottom-color -&gt; borderBottomColor获取字符串中出现最多的字符和及...原创 2018-10-24 20:15:46 · 343 阅读 · 0 评论 -
JavaScript垃圾收集
JavaScript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存。而在C和C++之类的语言中,开发人员的一项基本任务就是手工跟踪内存的使用情况,这是造成许多问题的一个根源。这种垃圾收集机制的原理其实很简单:找出那些不再继续使用的变量,然后释放其占用的内存。为此,垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间)周期性地执行这一操作。垃圾收集器必须跟踪哪个变量有用哪个...原创 2018-11-06 18:00:08 · 429 阅读 · 0 评论 -
跨域资源共享CORS
CORS需要浏览器和服务器同时支持,整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨域,就会自动添加一些附加的头信息,有事还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨域通信。两种请求简单请求同时满足以...原创 2018-10-17 12:57:22 · 223 阅读 · 0 评论 -
封装
由于JavaScript没有提供对类似private、public、protected等关键字的支持,我们只能以来变量的作用于来实现封装特性,而且智能模拟出public和private这两种封装性。出了ECNAScript6中提供的let之外,一般我们通过函数来创建作用域:var myObject = (function(){ var _name = 'zee'; // 私有(private...原创 2018-10-10 16:57:39 · 158 阅读 · 0 评论 -
JavaScript中的原型(链)&继承(二)
有点难受啊,我发现写博客,内容自己必须要懂,必须保证正确性。而且让读者在看的过程中,知道我说了什么,表达了什么,是一件相当不容易的事啊。然而这是最重要的一件事。。原型链原型链基本概念每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。假如,我们让原型对象等于另一个类型的实例,此时的原型对象将包含一个指向另一个原型的指针,相应原创 2017-05-06 21:08:08 · 359 阅读 · 0 评论 -
JavaScript中的作用域(链)和闭包(一)
学JavaScript有很长一段时间了,做了一些网页,总是有一些bug或者不好的解决方案使我困扰,感觉是原生js的基础没有打好,最近开始巩固基础,首先对作用域和闭包的相关知识回顾并总结了一下作用域首先介绍一下编译原理:JavaScript引擎进行编译的步骤和传统的编译语言相似,但某些环节可能更复杂。 传统语言的源代码在执行前会经历三个步骤。统称为“编译”。分别是:分词/词法分析—— 解析/语法分原创 2017-11-07 14:15:45 · 354 阅读 · 0 评论 -
关于AJAX请求JSON数据(解决responseText空的问题)
AJAX请求服务器提供的JSON数据 大家在前后端交互时,前台网页会和后台服务器以及数据库进行交互。感觉比较基础的就是将从后台获取的数据显示到页面中。最近,刚开始使用AJAX处理数据交互,遇到一些问题,并且解决了,做以下分享。众所周知,AJAX的核心是XMLHttpRequest对象。它完成了对数据的请求以及获取。见下:var xhr = new XMLHttpRequest();var u原创 2017-11-09 23:26:07 · 10160 阅读 · 5 评论 -
JavaScript中关于Array对象的方法特性总结
首先检测一个对象是不是Array对象(数组),此时我们用到了Array.isArray()方法。Array.isArray()方法的目的就是确定某个值到底是不是数组,不用管它是哪个全局执行环境中创建的。if(Array.isArray(value)){ //对数组执行某些操作}检测到一个值(对象)是数组。可以使用转换方法操作该数组。toString()方法会返回由数组中每个值的字符串形式拼接...原创 2018-03-18 22:21:33 · 273 阅读 · 0 评论 -
ECMAScript异步编程
ECMAScript异步编程涉及知识点:ECMAScript2015+Promiseasync/await异步编程node.js服务器const express = require('express')const app = express()app.get('/', (req, res) =&amp;amp;gt; { res.setHeader('...原创 2018-07-21 20:44:07 · 454 阅读 · 0 评论 -
前端路由&vue-router部分解读
前端路由 由于SPA单页应用以及前后端分离的思想的出现,前端路由在当今的前端开发中是必不可少的。一些流行框架vue、react都有对应的实现vue-router、react-router等。框架路由的实现都是对原生路由进行了封装。原生路由我们通常采用hash实现或者H5的history实现。hash路由hash路由:一个明显的标志就是带有#,我们主要是通过监听url中的h...原创 2018-09-15 19:46:06 · 297 阅读 · 0 评论 -
this、call和apply
JavaScript总是指向一个对象,指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数声明时的环境。this的指向除去不常用的with和eval的情况,具体到实际应用中,this的志向大致可以分为以下4种。作为对象的方法调用。作为普通函数调用。构造器调用。Function.prototype.call或Function.prototype.apply调用。作为对象...原创 2018-10-14 21:55:26 · 221 阅读 · 0 评论 -
闭包的更多作用
封装变量闭包可以帮助把一些不需要暴露在全局的变量封装成“私有变量”。假设有一个计算乘积的简单函数:var mult = function(){ var a = 1; for(var i = 0, l = arguments.length; i &amp;lt; l; i++) { a = a * arguments[i]; } return a;};// 加入缓存机制,提高函数性能...原创 2018-10-16 12:23:55 · 151 阅读 · 0 评论 -
JavaScript设计模式之单例模式
单例模式单例保证一个类只有一个实例,实现方法是一般先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保一个类只有一个实例对象。在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。(保证一个类仅有一个实例,并提供一个访问他的全局访问点)单例的作用和注意事项模式作用:模块间通信;系统中某个类的对象只能存在一个;保...原创 2018-10-10 11:03:41 · 187 阅读 · 0 评论 -
高阶函数
高阶函数是指至少满足下列条件之一的函数。函数可以作为参数被传递回调参数在ajax异步请求的应用中,回调函数的使用非常频繁。当我们想在ajax请求返回之后做一些事情,但又并不知道请求返回的确切时间时,最常见的方案就是把callback函数当作参数传入发起ajax请求的方法中,待请求完成之后执行callback函数:var getUserInfo = function(userId, ca...原创 2018-10-16 15:05:27 · 164 阅读 · 0 评论 -
令人耳目一新的鸭子
var duck = { duckSinging: function(){ console.log('嘎嘎嘎'); } }; var children = { duckSinging:function(){ console.log('嘎嘎嘎'); } }; var choir = []; //合唱团 var joinChoir = function(anim...原创 2018-10-10 11:33:13 · 203 阅读 · 0 评论 -
多态(继承)
多态同一操作作用于不同的对象上面,可以产生不同的对象上面,可以产生不同的解释和不同的执行结果。换句话说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。让你叫,你就叫var makeSound = function(animal){ if(animal instanceof Duck){ console.log('嘎嘎嘎'); }else if...原创 2018-10-10 16:07:33 · 162 阅读 · 0 评论