function throttle(fn, threshhold) { var last, timerId; threshhold || (threshhold = 250);
return function() { var now = Date.now(); if(last && now - last < threshhold) { clearTimeout(timerId); timerId = setTimeout(() => { fn.apply(this, arguments); }, threshhold) } else { last = now; fn.apply(this, arguments); } } }
function debounce(fn, interval) { var timerId = null;
return function() { clearTimeout(timerId); timerId = setTimeout(() => { fn.apply(this, arguments) }, interval) } }
Function.prototype.call = function(cxt, ...args) { ctx || (ctx = window); ctx.fn = this;
let args = []; let r = eval(`ctx.fn(${args})`); delete ctx.fn;
return r; }
Funtion.prototype.apply = function(ctx, args) { ctx || (ctx = window); ctx.fn = this;
let r = eval(`ctx.fn(${args})`) delete ctx.fn;
return r; }
Funtion.prototype.bind = function(obj) { if(type of this !== 'function') { return; }
var _self = this; var args = [].slice.call(arguments, 1); return function() { return _self.apply(obj, args.concat([].slice.call(arguments))) } }
new做了什么:
function newOps (ctor) { if(typeof ctor !== 'function') { throw new Error('the first param must be a function'); }
const new0bj = Object.create(ctor.prototype); const args = [].slice.call(arguments, 1);
const ctorReturnResult = ctor.apply(newObj, args);
if((typeof ctorReturnResult === 'object' && typeof ctorReturnResult !== null) || typeof ctorReturnResult === 'function') { return ctorReturnResult; } return newObj; }
function currying(fn) { const argArr = []; let closure = function(...args) { if(args.length > 0) { argArr = [...argArr, ...args]; return closure; } return fn(...argArr); } return closure;}
function Dog(color) {
Animal.apply(this, arguments);
this.name = 'dog';
}
/* 注意下面两行 */
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
function fib(n) { if(n === 0 || n === 1) return n; return fib(n - 2) + fib(n - 1);}
let fib = (function() { let memory = [] return function(n) { if(memory[n] !== undefined) { return memory[n] } return memory[n] = (n === 0 || n === 1) ? n : fibonacci(n-1) + fibonacci(n-2) }})()