91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Javascript實現call,bind,apply的代碼怎么寫

發布時間:2022-02-22 13:38:27 來源:億速云 閱讀:138 作者:iii 欄目:開發技術

這篇文章主要介紹了Javascript實現call,bind,apply的代碼怎么寫的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Javascript實現call,bind,apply的代碼怎么寫文章都會有所收獲,下面我們一起來看看吧。

1.檢查當前調用的是否為函數

2.如果當前沒有傳入指向的this,則賦值為window

3.將fn指向當前調用的函數

4.獲取傳入的參數

5.將參數傳入fn進行調用

6.將對象上的fn刪除

7.返回結果

  //普通call的實現
  function hello(){
      console.log('hello 我是'+this.name);
  };
  let person = {
      name:'krys'
  };
  var name = 'liang';//只有var的變量屬于window
  hello();// 'hello 我是liang'
  hello.call(person);//'hello 我是krys'
  hello.call();//'hello 我是liang'
  let person2 = {
      name:'lwl'
  }
  Function.prototype.mycall = function(context){
      //不傳入參數的時候,默認為window
      if(typeof this !== "function"){
          throw new TypeError('Error');
      }
      context = context || window;
      context.fn = this;//fn就是上面的hello方法
      const args = [...arguments].slice(1);//第一個參數不要
      const result = context.fn(...args);//把剩下的其他參數傳給hello
      delete context.fn;
      return result;
  }
  hello.mycall(person2);
function getParams(){
        console.log('我是',this.name,'獲取一些參數',...arguments);
    }
    let person3 = {
        name:'hhh'
    };
    getParams.apply(person3,['hello','world'])
    Function.prototype.myApply = function(context){
        if(typeof this !== "function"){
            throw new TypeError()
        }
        context = context || window;
        context.fn = this;
        let result;
        if(arguments[1]){
            //如果有傳入參數數組
            console.log(arguments[1])
            result  = context.fn(...arguments[1]);
        }else{
            result  = context.fn();
        }
        delete context.fn;
        return result;
    }
    getParams.myApply({name:'llll'},['jjj','kkkk','llll']);
function getParams(){
        console.log('我是',this.name,'獲取一些參數',...arguments);
    }
    let person3 = {
        name:'hhh'
    };
    let person4 = {
        name:'tttt'
    };
    getParams.bind(person3,'hello','world')
    getParams.bind(person4,'hello','world')('jjj','kkk');
    Function.prototype.myBind = function(context){
        if(typeof this !== "function"){
            throw new TypeError()
        }
        context = context || window;
        const _that = this;
        const args = [...arguments].slice(1);
        return function F(){
            if(this instanceof F){
                return new _that(...args,...arguments);//這里的arguments是上面的jjj kkk
            }
            return _that.apply(context,args.concat(...arguments));//這里的arguments是上面的jjj kkk
        }
    }
    getParams.myBind({name:'llll'},'jjj','kkkk','llll')('hhhhllll');

關于“Javascript實現call,bind,apply的代碼怎么寫”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Javascript實現call,bind,apply的代碼怎么寫”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五大连池市| 溆浦县| 五原县| 东乌| 洪洞县| 吉林省| 郧西县| 汕尾市| 南充市| 秭归县| 台安县| 剑川县| 新建县| 景泰县| 汤原县| 长岭县| 昌图县| 开平市| 个旧市| 芮城县| 偃师市| 玛多县| 基隆市| 密云县| 盘山县| 江西省| 郓城县| 汝城县| 保山市| 乐业县| 东海县| 黄浦区| 鸡泽县| 霍山县| 新绛县| 隆尧县| 江安县| 商城县| 石家庄市| 天水市| 桂林市|