中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

万荣县| 阿合奇县| 英吉沙县| 府谷县| 佛学| 阜城县| 桓仁| 昌宁县| 剑河县| 云安县| 聊城市| 天峻县| 铅山县| 霞浦县| 革吉县| 农安县| 云龙县| 精河县| 永靖县| 霍州市| 岳阳市| 怀宁县| 仁布县| 武清区| 泌阳县| 封丘县| 周至县| 比如县| 五指山市| 白朗县| 叙永县| 玉林市| 修水县| 芜湖县| 塔河县| 抚顺县| 荥经县| 黄浦区| 大竹县| 中超| 泰安市|