JavaScript
cellinlab
这个作者很懒,什么都没留下…
展开
-
ES6 修饰器 在日志记录中的应用
{ // 日志系统 let log = (type) => { return function(target, name, descriptor) { let src_method = descriptor.value descriptor.value = (...arg) => { src_method.apply(targe...原创 2020-03-31 18:12:26 · 206 阅读 · 0 评论 -
ES6 Generator 在抽奖和长轮询场景中的应用
{ // 抽奖次数限制 let draw = function(count) { // 抽奖逻辑 console.info(`剩余抽奖次数${count}`) } let residue = function* (count) { while (count > 0) { count-- yield draw(count) ...原创 2020-03-31 17:39:48 · 278 阅读 · 0 评论 -
ES6 Iterator 在简单对象中的实现
// Iterator{ let arr = ['hello', 'world'] let map = arr[Symbol.iterator]() console.log(map.next()) console.log(map.next()) console.log(map.next())}{ // 实现iterator let obj = { sta...原创 2020-03-31 16:54:22 · 156 阅读 · 0 评论 -
使用ES6 Proxy和Reflect实现数据校验
// 数据校验function validator(target, validator) { return new Proxy(target, { _validator: validator, set(target, key, value, proxy) { if (target.hasOwnProperty(key)) { let va = this._valida...原创 2020-03-31 14:47:22 · 259 阅读 · 0 评论 -
JavaScript 对象深拷贝的实现
// ./src/helpers/util.tsexport function isPlainObject(val: any): val is Object { return toString.call(val) === '[object Object]'}export function deepMerge (...objs: any[]): any { const resul...原创 2020-03-26 14:59:35 · 242 阅读 · 1 评论 -
重学Node 0x4 MiddleWare
中间件自定义中间件// logger.jsfunction log(req, res, next) { console.log('Logging...') next()}module.exports = log// index.js//...const logger = require('./logger')//...app.use(logger)内建中...原创 2020-02-07 15:35:42 · 180 阅读 · 0 评论 -
重学Node 0x3 RESTful Services and Express
RESTfulRepresentational State TransferExpress// index.jsconst express = require('express')const app = express()app.get('/', (req, res) => { res.send('Helo Express')})app.liste...原创 2020-02-05 18:34:05 · 167 阅读 · 0 评论 -
重学Node 0x2 NPM
initnpm initInstallnpm install underscoreUsing// index.jsconst _ = require('underscore')// require work// Core module// File or folder// node_modulesconst result = _.contain...原创 2020-02-05 12:44:05 · 158 阅读 · 0 评论 -
重学Node 0x1 Node Modules System(2)
Path Module// app.jsconst path = require('path')const pathObj = path.parse(__filename)console.log(pathObj)OS Module// app.jsconst os = require('os')const totalMemory = os.totalmem()...原创 2020-02-04 13:31:06 · 118 阅读 · 0 评论 -
前端Ajax后端Express+multer实现多文件上传
业务描述某项目需要从一批shp文件,并从中提取信息。前端页面<form id="form1" action="#" method="POST" enctype="multipart/form-data"> <div class="info"> <label for="stage">期数</label> <input type=...原创 2020-01-17 10:42:30 · 622 阅读 · 0 评论 -
JSOOP module(模块化)
可以利用模块隐藏部分实现const _radius = new WeakMap()class Circle { constructor(radius) { _radius.set(this, radius) } draw() { console.log(`Circle with radius ${_radius.get(this)}`) }}con...原创 2020-01-12 14:32:12 · 126 阅读 · 0 评论 -
JSOOP 实战Stack(栈)的实现
const _items = new WeakMap()class Stack { constructor() { _items.set(this, []) } push(obj) { _items.get(this).push(obj) } pop() { const items = _items.get(this) if (items.l...原创 2020-01-12 13:59:08 · 148 阅读 · 0 评论 -
JSOOP ES6继承(extends、super和方法重写)
extendsclass Shape { move() { console.log('move') }}class Circle extends Shape { draw() { console.log('draw') }}const c = new Circle()superclass Shape { constructor (c...原创 2020-01-12 13:39:10 · 1281 阅读 · 0 评论 -
JSOOP 存取器(getter和setter)
外部访问私有属性const _radius = new WeakMap()class Circle { constructor(radius) { _radius.set(this, radius) } getRadius() { return _radius.get(this) }}const c = new Circle(1)es6语法,实...原创 2020-01-12 13:19:41 · 208 阅读 · 0 评论 -
JSOOP 私有化属性(Symbol和WeakMap)
使用Symbol实现私有属性const _radius = Symbol()class Circle { constructor(radius) { this[_radius] = radius }}const c = new Circle(1)const key = Object.getOwnPropertySymbols(c)[0]console.log(c[...原创 2020-01-11 23:44:49 · 226 阅读 · 0 评论 -
JSOOP this关键字
方法调用:从一个对象上调用方法,对象中的this指向对象本身函数调用:这种调用没有指向,其this指向全局对象(window或global)const Circle = function() { this.draw = function() { console.log(this) }}const c = new Circle()// method callc....原创 2020-01-11 23:09:58 · 165 阅读 · 0 评论 -
JSOOP class 静态方法和实例方法
实例方法在实例或者说对象中生效,静态方法在类中起效。class Circle { constructor(radius) { this.radius = radius } // instance method draw() {} // Static method static parse(str) { const radius = JSON.par...原创 2020-01-11 20:51:12 · 448 阅读 · 0 评论 -
JSOOP class
简单示例class Circle { constructor (radius) { this.radius = radius this.move = function() {} } draw() { console.log('draw') }}const c = new Circle(1)class本质是function,_class...原创 2020-01-11 20:27:15 · 151 阅读 · 0 评论 -
JSOOP 继承的坑——好的组合胜过继承(mixins、Object.assign())
应该避免多层继承,可以将一些简单的对象组合成新的对象。const canEat = { eat: function() { this.hunger-- console.log('eatting') }}const canWalk = { walk: function() { console.log('walking') }}function...原创 2020-01-11 19:48:31 · 299 阅读 · 0 评论 -
JSOOP 多态 及其应用场景
多态实现及其应用function extend(Child, Parent) { Child.prototype = Object.create(Parent.prototype) Child.prototype.constructor = Child}function Shape(color) { this.color = color}Shape.prototype...原创 2020-01-11 16:34:19 · 327 阅读 · 0 评论 -
JSOOP 封装extend函数和基类方法重写
封装之前function Shape(color) { this.color = color}Shape.prototype.duplicate = function() { console.log('duplicate')}function Circle(radius, color) { Shape.call(this, color) this.radius = ra...原创 2020-01-09 23:17:13 · 320 阅读 · 0 评论 -
JSOOP 构造函数动态创建对象
function Shape() {}Shape.prototype.duplicate = function() { console.log('duplicate')}function Circle(radius) { this.radius = radius}// Circle.prototype = Object.create(Shape.prototype)Ci...原创 2020-01-09 22:47:05 · 192 阅读 · 0 评论 -
JSOOP Object.create 从给定的原型创建对象
function Shape() {}Shape.prototype.duplicate = function() { console.log('duplicate')}function Circle(radius) { this.radius = radius}Circle.prototype = Object.create(Shape.prototype)Circl...原创 2020-01-09 22:35:47 · 125 阅读 · 0 评论 -
JavaScript prototype实现静态方法(原型继承)
原型继承function Circle (radius) { // instance members this.radius = radius}// Prototype membersCircle.prototype.draw = function() { console.log('draw')}const c1 = new Circle(1)const c2 =...原创 2020-01-07 21:08:27 · 589 阅读 · 0 评论 -
JavaScript Unicode和字符串相互转换
const str = '????:Hello World????!'const unicodeArr = []for (const char of str) { unicodeArr.push(char.codePointAt(0))}console.log(unicodeArr)let newStr = ''unicodeArr.forEach(unicode => { ...原创 2020-01-07 20:51:20 · 379 阅读 · 0 评论 -
JavaScript 值类型和引用类型
值类型let number = 10function increase(number) { number++}increase(number)console.log(number) // 10引用类型let obj = { value: 10}function increase(obj) { obj.value ++}increase(obj)co...原创 2020-01-05 22:58:49 · 112 阅读 · 0 评论 -
使用Promise过程中resolve或reject后,后面代码还会执行,默认加return较妥
console.log(111) p() .then(result => { console.log(`p result:${result}`) }) .catch(err => { console.log(`p err :${err}`) }) p1() .th...原创 2019-12-13 10:16:46 · 21890 阅读 · 1 评论 -
《Javascript 高级程序设计(第三版)》笔记0x2 JavaScript基本概念(1)
目录语法变量数据类型 typeof: Undefined类型 Null类型 Boolean类型 Number类型 浮点数值 数值范围 NaN 数值转换 String类型 字符字面量 字符串的特点 转换为字符串 Object类型...原创 2018-12-04 19:49:46 · 236 阅读 · 0 评论 -
《Javascript 高级程序设计(第三版)》笔记0x3 JavaScript基本概念(2)
目录 操作符 一元操作符 位操作符 布尔操作符 乘性操作符 加性操作符 关系操作符 相等操作符 条件操作符 赋值操作符 逗号操作符操作符 包括算术操作符、位操作符、关系操作符和相等操作符。 一元操作符//递增和递减操作符var age = 29;va...原创 2018-12-05 00:10:30 · 254 阅读 · 0 评论 -
《Javascript 高级程序设计(第三版)》笔记0x4 JavaScript基本概念(3)
目录 语句 if语句 do-while语句 while语句 for语句 for-in语句 label语句 break和continue语句 with语句 switch语句函数 理解参数 不能重载语句 if语句if (i > 25) { alert("Greater than 25....原创 2018-12-05 09:01:13 · 185 阅读 · 0 评论 -
《Javascript 高级程序设计(第三版)》笔记0x5 变量|作用域|内存
目录 基本类型和引用类型的值 动态的属性 复制变量值 传递参数 检测类型 执行环境及作用域 全局执行环境: 函数执行环境: 作用域链(scope chain): 延长作用域链 没有块级作用域 声明变量 查询标识符垃圾收集 标记清除 引用计...原创 2018-12-05 13:53:15 · 198 阅读 · 0 评论 -
《Javascript 高级程序设计(第三版)》笔记0x6 引用类型(1)
目录 Object类型Array 类型 检测数组 转换方法 toString(),valueOf() toLocaleString() join() 栈方法 push(),pop() 队列方法 push(),shift(),unshift() ...原创 2018-12-05 20:24:42 · 278 阅读 · 0 评论 -
《Javascript 高级程序设计(第三版)》笔记0xA OOP 继承
目录原型链 别忘记默认的原型 确定原型和实例的关系 instanceof 操作符 isPrototypeOf()方法 谨慎地定义方法 原型链的问题借用构造函数(constructor stealing) 传递参数 借用构造函数的问题组合继承(combination inheritance)...原创 2018-12-12 18:01:15 · 203 阅读 · 1 评论 -
《Javascript 高级程序设计(第三版)》笔记0x7 引用类型(2)
目录 Function 类型 没有重载 函数声明与函数表达式 作为值的函数 将一个函数作为另一个函数的结果返回 从一个函数中返回另一个函数 函数内部属性 callee 属性 this caller 函数属性和方法 属性:length 和 proto...原创 2018-12-12 09:38:38 · 274 阅读 · 0 评论 -
《Javascript 高级程序设计(第三版)》笔记0xB 函数表达式
目录递归闭包 闭包与变量 关于this对象 内存泄漏模仿块级作用域私有变量 特权方法(privileged method) 静态私有变量 模块模式 增强的模块模式 创建一个函数并将它赋值给变量 functionName。这种情况下创建的函数叫做匿名函数(anonymous func...原创 2018-12-12 23:56:26 · 204 阅读 · 0 评论 -
《Javascript 高级程序设计(第三版)》笔记0x1 JavaScript简介
诞生 受网速限制,急需一种机制可以在客户端完成输入验证。 Netscape:LiveScript-->JavaScript MicroSoft:JScript ECMA(European Computer Manufacturers Association):ECMAScript JavaScript实现 ...原创 2018-12-04 00:35:07 · 183 阅读 · 0 评论 -
《Javascript 高级程序设计(第三版)》笔记0xC BOM window 对象
目录 window 对象 全局作用域 窗口关系及框架 top parent 窗口位置 screenLeft 和 screenTop 属性 moveTo()和 moveBy()方法 窗口大小 innerWidth、 innerHeight、 outerWidth 和...原创 2018-12-13 12:10:01 · 245 阅读 · 0 评论 -
《Javascript 高级程序设计(第三版)》笔记0xD BOM location、navigator、screen、history
目录location 对象 查询字符串参数 位置操作 replace() reload()navigator 对象 检测插件 注册处理程序 registerContentHandler() registerProtocolHandler()screen 对象his...原创 2018-12-13 12:37:59 · 192 阅读 · 1 评论 -
《Javascript 高级程序设计(第三版)》笔记0xE 客户端检测
目录能力检测(特性检测) 更可靠的能力检测 能力检测,不是浏览器检测 怪癖检测(quirks detection)用户代理检测 用户代理字符串的历史 用户代理字符串检测技术 1. 识别呈现引擎 2. 识别浏览器 3.识别平台 4.识别 Windows 操作系统 ...原创 2018-12-13 18:01:27 · 159 阅读 · 0 评论 -
《Javascript 高级程序设计(第三版)》笔记0xF 节点:Node、Document
目录节点层次 Node类型 nodeName 和 nodeValue 属性 节点关系 操作节点 Document类型 文档的子节点 文档信息 查找元素 getElementById() getElementsByTagName() get...原创 2018-12-13 20:25:47 · 382 阅读 · 0 评论