Skip to content

Instantly share code, notes, and snippets.

View yangfch3's full-sized avatar
🎯
Focusing

Fucheng Yang yangfch3

🎯
Focusing
  • NetEase
  • Internet
View GitHub Profile
@yangfch3
yangfch3 / inherit.js
Created October 25, 2016 08:03
JavaScript 继承最佳实践(寄生组合式继承)
function inherit (SubType, SuperType) {
if (Object.create) {
var prototype = Object.create(SuperType.prototype);
prototype.constructor = SubType;
SubType.prototype = prototype;
return;
}
function F() {}
F.prototype = SuperType.prototype;
var prototype = new F();
@yangfch3
yangfch3 / ajax-upload-progress-demo.html
Last active October 24, 2016 11:08
ajax 上传进度条 demo
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta charset="utf-8">
<meta content="initial-scale=1,maximum-scale=1,user-scalable=no,width=device-width" name="viewport" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="renderer" content="webkit">
<meta http-equiv="Cache-Control" content="no-siteapp" />
@yangfch3
yangfch3 / ajax.js
Last active March 23, 2020 07:06
ajax 请求封装
var Ajax = (function() {
var methodsList = ['get', 'post', 'head', 'options', 'put', 'connect', 'trace', 'delete'];
/**
* Ajax
* @param {String} url
* @param {Function} callback
* @param {Object/String} data
* @param {Object} options
*
@yangfch3
yangfch3 / event-simulator.js
Last active October 25, 2016 06:21
事件模拟器与执行器
// 事件模拟器与执行器
var eventSimulator = (function () {
function fn(element, type) {
var ctx = fn;
var options = extend(ctx.defaultOptions, arguments[2] || {});
var oEvent, eventType = null;
for (var name in ctx.eventMatchers) {
if (ctx.eventMatchers[name].test(type)) {
eventType = name;
@yangfch3
yangfch3 / observer-event-target.js
Last active April 13, 2018 08:15
订阅-发布模式(观察者模式)
var EventTarget = (function() {
var _toArray = (function(obj, offset) {
offset = offset >= 0 ? offset : 0;
if (Array.from) {
// Array.from: convert an obj or an array-like obj to an array
return function(obj, offset) {
return Array.from(obj).slice(offset);
}
}
@yangfch3
yangfch3 / async-in-all.html
Last active November 17, 2016 13:09
异步编程示例:Generator、thunkify 机制、Promise、使用递归实现自动化流程控制
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta charset="utf-8">
<meta content="initial-scale=1,maximum-scale=1,user-scalable=no,width=device-width" name="viewport" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="renderer" content="webkit">
<meta http-equiv="Cache-Control" content="no-siteapp" />
@yangfch3
yangfch3 / mock-async-api.js
Last active December 13, 2016 02:37
模拟一个异步 API
// 模仿一个需要耗时 2000ms 的异步 API:asyncOp
const asyncOp = function(a, b, callback) {
try {
// 这里是可能出现输出 error 的操作
if (typeof a !== 'number' || typeof b !== 'number') {
let err = new Error('asyncOp(): 前两个参数必须为数值');
err.type = 1;
throw err;
}
if (typeof callback !== 'function') {
@yangfch3
yangfch3 / object-iterator-and-nodelist-with-iterator.js
Last active October 15, 2016 05:58
为对象添加遍历器以及使用遍历器实现指针结构(如链表)的遍历
/**
* 为 类或构造函数 的原型部署 Iterable 接口
* → 为 类或构造函数 的 prototype 对象部署 [Symbol.iterator] 方法
*/
function Obj(values) {
// values 为数组
this.values = values;
}
// 假设我们的遍历的目标是:遍历对象 values 数组的所有元素值
@yangfch3
yangfch3 / curring-and-tailRecursion.js
Last active October 14, 2016 08:27
柯里化与尾递归优化
/**
* curring 用于为函数减少参数数量
*/
function currying(fn) {
var args = Array.prototype.slice.call(arguments, 1);
return function() {
var innerArgs = Array.prototype.slice.call(arguments);
var concatArgs = args.concat(innerArgs);
return fn.apply(this, concatArgs);
@yangfch3
yangfch3 / ES6-module-circle-import.js
Last active October 12, 2016 04:12
ES6 模块循环依赖
/**
* ES6 模块循环依赖时
* 代码的运行过程与 CommonJS 一致
* 不同的是变量引用的处理不同
* ES6加载的变量,都是动态引用其所在的模块。只要引用存在,代码就能执行。
*/
/**
* module-a.js
*/