模拟new实现
function newObject() {let obj = new Object();let Con = [].shift.apply(arguments)obj.__proto__ = Con.prototype;let res = Con.apply(obj,arguments)return typeof res == "object" ? res : obj;}
模拟instanceOf
function instanceOf(left,right) {let proto = left.__protolet prototype = right.prototypewhile(true) {if(proto == null) return falseif(proto == prototype) return trueproto = proto.__proto}}
防抖 debounce
function debounce(fn,wait=50,immediate) {let timer;return function() {if(immediate) {fn.apply(this,arguments)}if(timer) clearTimeout(timer)timer = setTimeout(()=> {fn.apply(this,arguments)},wait)}}
节流 throttle
function throttle(fn,wait=50) {let timer;return function() {if(!timer) {timer = setTimeout(()=> {fn.apply(this,arguments)timer = null},wait)}}}
jsonp
function jsonp(url,callback,success) {let script = document.createElement("script")script.src = url;script.async = true;script.type = "text/javascript"window[callback] = function(data) {success && success(data)}document.body.append(script)}
继承
function a() {this.a = "a"}a.prototype.test = function() {console.log(this.a)}function b() {a.call(this);this.b = "b"}function tmp() {}tmp.prototype = a.prototype;b.prototype = new tmp();b.prototype.construcotr = b;
模拟call
Function.prototype.mycall = function(content = window) {content.fn = this;let args = [...arguments].slice(1);let result = content.fn(...args);delect content.fn;return result;}
模拟apply
Function.prototype.myapply = function(content = window) {content.fn = this;let result;if(argument[1]) {result = content.fn(...argument[1]);} else {result = content.fn();}delect content.fn;return result;}
模拟bind
Function.prototype.mybind = function(content) {if(typeof this != "function") {throw Error("not a function")}let fn = this;let args = [...arguments].slice(1);let resFn = function() {return fn.apply(this.instance == resFn ? this : content,args.concat(...arguments) )}function tmp() {}tmp.prototype = this.prototype;resFn.prototype = new tmp();return resFn;}
