
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 · 214 阅读 · 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 · 295 阅读 · 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 · 169 阅读 · 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 · 273 阅读 · 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 · 261 阅读 · 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 · 189 阅读 · 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 · 175 阅读 · 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 · 168 阅读 · 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 · 130 阅读 · 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 · 641 阅读 · 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 · 136 阅读 · 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 · 168 阅读 · 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 · 1300 阅读 · 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 · 221 阅读 · 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 · 251 阅读 · 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 · 181 阅读 · 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 · 469 阅读 · 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 · 157 阅读 · 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 · 318 阅读 · 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 · 342 阅读 · 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 · 337 阅读 · 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 · 208 阅读 · 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 · 135 阅读 · 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 · 619 阅读 · 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 · 398 阅读 · 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 · 128 阅读 · 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 · 22415 阅读 · 1 评论 -
JavaScript基础算法——Sum All Primes(求小于等于给定数值的质数之和)
要求:求小于等于给定数值的质数之和。只有 1 和它本身两个约数的数叫质数。例如,2 是质数,因为它只能被 1 和 2 整除。1 不是质数,因为它只能被自身整除。给定的数不一定是质数。样本:sumPrimes(10)应该返回一个数字。sumPrimes(10)应该返回 17。sumPrimes(977)应该返回 73156。解法:function sumP...原创 2019-04-22 09:24:47 · 418 阅读 · 0 评论 -
JavaScript基础算法——Sum All Odd Fibonacci Numbers 斐波那契数列奇数和
要求给一个正整数num,返回小于或等于num的斐波纳契奇数之和。斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。样本sumFibs(1)应该返回一个数字。sumFibs(1000)应该返回 1785。sumFibs(4000000)...原创 2019-04-04 11:00:17 · 266 阅读 · 0 评论 -
JavaScript基础算法——Spinal Tap Case 以连字符连接所有小写单词
要求将字符串转换为 spinal case。Spinal case 是 all-lowercase-words-joined-by-dashes 这种形式的,也就是以连字符连接所有小写单词。样本spinalCase("This Is Spinal Tap")应该返回"this-is-spinal-tap"。spinalCase("thisIsSpinalTap")应该返回"t...原创 2019-04-04 09:42:11 · 294 阅读 · 0 评论 -
JavaScript基础算法——Convert HTML Entities
要求将字符串中的字符 &、<、>、" (双引号), 以及 '(单引号)转换为它们对应的 HTML 实体。样本convert("Dolce & Gabbana")应该返回Dolce & Gabbana。convert("Hamburgers < Pizza < Tacos")应该返回Hamburgers &l...原创 2019-04-03 21:04:33 · 308 阅读 · 0 评论 -
JavaScript基础算法——Sorted Union
要求写一个 function,传入两个或两个以上的数组,返回一个以给定的原始数组排序的不包含重复值的新数组。换句话说,所有数组中的所有值都应该以原始顺序被包含在内,但是在最终的数组中不包含重复值。非重复的数字应该以它们原始的顺序排序,但最终的数组不应该以数字顺序排序。样本unite([1, 3, 2], [5, 2, 1, 4], [2, 1])应该返回[1, 3, 2, ...原创 2019-04-03 20:19:50 · 162 阅读 · 0 评论 -
JavaScript基础算法——Missing letters
要求从传递进来的字母序列中找到缺失的字母并返回它。如果所有字母都在序列中,返回 undefined。参考String.charCodeAt()String.fromCharCode()样本fearNotLetter("abce")应该返回 "d"。fearNotLetter("abcdefghjklmno")应该返回 "i"。fearNotLetter("bcd"...原创 2019-04-03 19:50:30 · 216 阅读 · 0 评论 -
JavaScript基础算法——DNA Pairing 基因配对多种解法
要求DNA 链缺少配对的碱基。依据每一个碱基,为其找到配对的碱基,然后将结果作为第二个数组返回。Base pairs(碱基对) 是一对 AT 和 CG,为给定的字母匹配缺失的碱基。在每一个数组中将给定的字母作为第一个碱基返回。例如,对于输入的 GCG,相应地返回 [["G", "C"], ["C","G"],["G", "C"]]字母和与之配对的字母在一个数组内,然后所有数组再...原创 2019-04-03 19:18:53 · 643 阅读 · 0 评论 -
JavaScript基础算法——Pig Latin 儿童黑话
要求把指定的字符串翻译成 pig latin。Pig Latin 把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 "ay"。如果单词以元音开始,你只需要在词尾添加 "way" 就可以了。参考Array.indexOf()Array.push()Array.join()String.substr()String.split(...原创 2019-04-03 19:01:16 · 539 阅读 · 0 评论 -
JavaScript基础算法——Search and Replace
要求使用给定的参数对句子执行一次查找和替换,然后返回新句子。第一个参数是将要对其执行查找和替换的句子。第二个参数是将被替换掉的单词(替换前的单词)。第三个参数用于替换第二个参数(替换后的单词)。注意:替换时保持原单词的大小写。例如,如果你想用单词 "dog" 替换单词 "Book" ,你应该替换成 "Dog"。参考Array.splice()String.replac...原创 2019-04-03 18:23:07 · 299 阅读 · 0 评论 -
JavaScript基础算法——Where art thou
要求写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组。如果返回的数组中包含 source 对象的属性-值对,那么此对象的每一个属性-值对都必须存在于 collection 的对象中。例如,如果第一个参数是 [{ first: "Romeo", last: "Montague" }, { first: "Mercutio...原创 2019-04-03 16:36:22 · 1127 阅读 · 0 评论 -
JQuery入门 0x3 整体概览
jQuery尺寸jQuery概览原创 2019-04-01 10:15:23 · 173 阅读 · 0 评论 -
JQuery入门 0x2 案例——列表显示部分和显示全部
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>显示更多</title> <link rel="stylesheet" type="text/css" href="./css/def...原创 2019-03-30 14:38:00 · 238 阅读 · 0 评论 -
JQuery入门 0x1 jQuery选择器
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>jQuery选择器</title> <style> div,span,p { ...原创 2019-03-30 13:50:31 · 233 阅读 · 0 评论