模拟new实现

    1. function newObject() {
    2. let obj = new Object();
    3. let Con = [].shift.apply(arguments)
    4. obj.__proto__ = Con.prototype;
    5. let res = Con.apply(obj,arguments)
    6. return typeof res == "object" ? res : obj;
    7. }

    模拟instanceOf

    1. function instanceOf(left,right) {
    2. let proto = left.__proto
    3. let prototype = right.prototype
    4. while(true) {
    5. if(proto == null) return false
    6. if(proto == prototype) return true
    7. proto = proto.__proto
    8. }
    9. }

    防抖 debounce

    1. function debounce(fn,wait=50,immediate) {
    2. let timer;
    3. return function() {
    4. if(immediate) {
    5. fn.apply(this,arguments)
    6. }
    7. if(timer) clearTimeout(timer)
    8. timer = setTimeout(()=> {
    9. fn.apply(this,arguments)
    10. },wait)
    11. }
    12. }

    节流 throttle

    1. function throttle(fn,wait=50) {
    2. let timer;
    3. return function() {
    4. if(!timer) {
    5. timer = setTimeout(()=> {
    6. fn.apply(this,arguments)
    7. timer = null
    8. },wait)
    9. }
    10. }
    11. }

    jsonp

    1. function jsonp(url,callback,success) {
    2. let script = document.createElement("script")
    3. script.src = url;
    4. script.async = true;
    5. script.type = "text/javascript"
    6. window[callback] = function(data) {
    7. success && success(data)
    8. }
    9. document.body.append(script)
    10. }

    继承

    1. function a() {
    2. this.a = "a"
    3. }
    4. a.prototype.test = function() {
    5. console.log(this.a)
    6. }
    7. function b() {
    8. a.call(this);
    9. this.b = "b"
    10. }
    11. function tmp() {}
    12. tmp.prototype = a.prototype;
    13. b.prototype = new tmp();
    14. b.prototype.construcotr = b;

    模拟call

    1. Function.prototype.mycall = function(content = window) {
    2. content.fn = this;
    3. let args = [...arguments].slice(1);
    4. let result = content.fn(...args);
    5. delect content.fn;
    6. return result;
    7. }

    模拟apply

    1. Function.prototype.myapply = function(content = window) {
    2. content.fn = this;
    3. let result;
    4. if(argument[1]) {
    5. result = content.fn(...argument[1]);
    6. } else {
    7. result = content.fn();
    8. }
    9. delect content.fn;
    10. return result;
    11. }

    模拟bind

    1. Function.prototype.mybind = function(content) {
    2. if(typeof this != "function") {
    3. throw Error("not a function")
    4. }
    5. let fn = this;
    6. let args = [...arguments].slice(1);
    7. let resFn = function() {
    8. return fn.apply(this.instance == resFn ? this : content,args.concat(...arguments) )
    9. }
    10. function tmp() {}
    11. tmp.prototype = this.prototype;
    12. resFn.prototype = new tmp();
    13. return resFn;
    14. }