最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript動手實現(xiàn)call,bind,apply的代碼詳解

 更新時間:2022年02月22日 11:44:11   作者:krysliang  
這篇文章主要為大家詳細(xì)介紹了Javascript動手實現(xiàn)call,bind,apply的代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1.檢查當(dāng)前調(diào)用的是否為函數(shù)

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

3.將fn指向當(dāng)前調(diào)用的函數(shù)

4.獲取傳入的參數(shù)

5.將參數(shù)傳入fn進(jìn)行調(diào)用

6.將對象上的fn刪除

7.返回結(jié)果

  //普通call的實現(xiàn)
  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){
      //不傳入?yún)?shù)的時候,默認(rèn)為window
      if(typeof this !== "function"){
          throw new TypeError('Error');
      }
      context = context || window;
      context.fn = this;//fn就是上面的hello方法
      const args = [...arguments].slice(1);//第一個參數(shù)不要
      const result = context.fn(...args);//把剩下的其他參數(shù)傳給hello
      delete context.fn;
      return result;
  }
  hello.mycall(person2);
function getParams(){
        console.log('我是',this.name,'獲取一些參數(shù)',...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]){
            //如果有傳入?yún)?shù)數(shù)組
            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,'獲取一些參數(shù)',...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');

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!  

相關(guān)文章

  • js實現(xiàn)iframe動態(tài)調(diào)整高度的代碼

    js實現(xiàn)iframe動態(tài)調(diào)整高度的代碼

    iframe,尤其是不帶邊框的iframe因為能和網(wǎng)頁無縫的結(jié)合從而不刷新頁面的情況下更新頁面的部分?jǐn)?shù)據(jù)成為可能,可是iframe的大小卻不像層那樣可以“伸縮自如”,所以帶來了使用上的麻煩,給iframe設(shè)置高度的時候多了也不好,少了更是不行,現(xiàn)在,讓我來告訴大家一種iframe動態(tài)調(diào)整高度的方法,主要是以下JS函數(shù):
    2008-01-01
  • 使用 JScript 創(chuàng)建 .exe 或 .dll 文件的方法

    使用 JScript 創(chuàng)建 .exe 或 .dll 文件的方法

    JScript 是由微軟開發(fā)的活動腳本語言,基于 ECMAScript 規(guī)范實現(xiàn)。Internet Explorer 中的 JavaScript,實際上是指 JScript。
    2011-07-07
  • JavaScript實現(xiàn)的內(nèi)存數(shù)據(jù)庫LokiJS介紹和入門實例

    JavaScript實現(xiàn)的內(nèi)存數(shù)據(jù)庫LokiJS介紹和入門實例

    這篇文章主要介紹了JavaScript實現(xiàn)的內(nèi)存數(shù)據(jù)庫LokiJS介紹和入門實例,LokiJS是一個內(nèi)存數(shù)據(jù)庫,將性能考慮放在第一位,使用JavaScript編寫,需要的朋友可以參考下
    2014-11-11
  • JavaScript ParseFloat()方法

    JavaScript ParseFloat()方法

    parseFloat()方法可以解析一個字符串,并返回一個浮點數(shù)。本文給大家分享javascript parsefloat()方法的相關(guān)知識,對javascript parsefloat相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • javascript實現(xiàn)的圖片預(yù)覽和上傳功能示例【兼容IE 9】

    javascript實現(xiàn)的圖片預(yù)覽和上傳功能示例【兼容IE 9】

    這篇文章主要介紹了javascript實現(xiàn)的圖片預(yù)覽和上傳功能,結(jié)合實例形式分析了javascrpt圖片預(yù)覽和上傳功能相關(guān)實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下
    2020-05-05
  • javascript 隨機(jī)數(shù) 與高級應(yīng)用 附vbscript(asp) 隨機(jī)數(shù)總結(jié)

    javascript 隨機(jī)數(shù) 與高級應(yīng)用 附vbscript(asp) 隨機(jī)數(shù)總結(jié)

    有時忘了程序的隨機(jī)數(shù)函數(shù)或javascript和vbscript的隨機(jī)數(shù)混亂了,特總結(jié)下兩者的隨機(jī)數(shù)函數(shù),以備以后使用方便。
    2007-10-10
  • 詳解用場景去理解函數(shù)柯里化(入門篇)

    詳解用場景去理解函數(shù)柯里化(入門篇)

    這篇文章主要介紹了用場景去理解函數(shù)柯里化(入門篇),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 探究Javascript模板引擎mustache.js使用方法

    探究Javascript模板引擎mustache.js使用方法

    這篇文章主要為大家介紹了Javascript模板引擎mustache.js使用方法,mustache.js是一個簡單強(qiáng)大的Javascript模板引擎,使用它可以簡化在js代碼中的html編寫,壓縮后只有9KB,非常值得在項目中使用,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Js動態(tài)創(chuàng)建div

    Js動態(tài)創(chuàng)建div

    因為功能需要,需要動態(tài)創(chuàng)建DIV
    2008-09-09
  • 微信小程序?qū)W習(xí)筆記之函數(shù)定義、頁面渲染圖文詳解

    微信小程序?qū)W習(xí)筆記之函數(shù)定義、頁面渲染圖文詳解

    這篇文章主要介紹了微信小程序?qū)W習(xí)筆記之函數(shù)定義、頁面渲染,結(jié)合實例形式較為詳細(xì)的分析了微信小程序中函數(shù)的定義、生命周期、模板調(diào)用、樣式控制等操作技巧,并配合圖文形式進(jìn)行了詳細(xì)說明,需要的朋友可以參考下
    2019-03-03

最新評論

贺兰县| 天祝| 伽师县| 拜城县| 太保市| 九寨沟县| 安西县| 南和县| 彭山县| 杭州市| 兴海县| 孟村| 绥棱县| 乐山市| 江山市| 梁平县| 潜山县| 腾冲县| 威信县| 库尔勒市| 海安县| 佳木斯市| 济南市| 额尔古纳市| 大宁县| 皮山县| 米泉市| 通江县| 武陟县| 分宜县| 金秀| 剑阁县| 沾化县| 侯马市| 昭平县| 叙永县| 石台县| 宜川县| 双桥区| 虹口区| 屯昌县|